Skip to content

Commit ee8edec

Browse files
committed
[fix] 修复了带参数的宏没有将参数用括号保护的bug
1 parent 0eca488 commit ee8edec

7 files changed

Lines changed: 89 additions & 88 deletions

File tree

L2_Core/utils/inc/ek_def.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
# define __WEAK __weak
7070
# define __PACKED __packed
7171
# define __PACKED_STRUCT __packed struct
72-
# define __ALIGNED(x) __align(x)
72+
# define __ALIGNED(x) __align((x))
7373
# define __USED __attribute__((used))
7474
# define __SECTION(x) __attribute__((section(x)))
7575
# define __NO_RETURN __declspec(noreturn)

L2_Core/utils/inc/ek_export.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,14 @@ typedef void (*_ek_export_init_fn_t)(void);
5454
* }
5555
* EK_EXPORT(my_init, 10); // 优先级 10
5656
*/
57-
# define EK_EXPORT(fn, prio) \
58-
const _ek_export_init_fn_t __init_##fn##prio __attribute__((used, section(".ek_export_fn." _EK_STR(prio)))) = fn
57+
# define EK_EXPORT(fn, prio) \
58+
const _ek_export_init_fn_t __init_##fn##prio __attribute__((used, section(".ek_export_fn." _EK_STR(prio)))) = \
59+
(fn)
5960

60-
# define EK_EXPORT_HARDWARE(fn) EK_EXPORT(fn, 0)
61-
# define EK_EXPORT_COMPONENTS(fn) EK_EXPORT(fn, 1)
62-
# define EK_EXPORT_APP(fn) EK_EXPORT(fn, 2)
63-
# define EK_EXPORT_USER(fn) EK_EXPORT(fn, 3)
61+
# define EK_EXPORT_HARDWARE(fn) EK_EXPORT((fn), 0)
62+
# define EK_EXPORT_COMPONENTS(fn) EK_EXPORT((fn), 1)
63+
# define EK_EXPORT_APP(fn) EK_EXPORT((fn), 2)
64+
# define EK_EXPORT_USER(fn) EK_EXPORT((fn), 3)
6465

6566
#else
6667

L2_Core/utils/inc/ek_log.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
* @example
5454
* EK_LOG_FILE_TAG("main.c");
5555
*/
56-
# define EK_LOG_FILE_TAG(tag) static const char *_EK_LOG_TAG_ = tag;
56+
# define EK_LOG_FILE_TAG(tag) static const char *_EK_LOG_TAG_ = (tag);
5757

5858
/**
5959
* @brief 定义获取时间戳函数

L2_Core/utils/inc/ek_mem.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void *_ek_realloc(void *ptr, size_t size);
4141
* @retval 分配的内存指针,失败返回 NULL
4242
*/
4343
#ifndef ek_malloc
44-
# define ek_malloc(size) _ek_malloc(size)
44+
# define ek_malloc(size) _ek_malloc((size))
4545
#endif
4646

4747
/**
@@ -51,7 +51,7 @@ void *_ek_realloc(void *ptr, size_t size);
5151
* @retval 重新分配后的内存指针,失败返回 NULL
5252
*/
5353
#ifndef ek_realloc
54-
# define ek_realloc(ptr, size) _ek_realloc(ptr, size)
54+
# define ek_realloc(ptr, size) _ek_realloc((ptr), (size))
5555
#endif
5656

5757
/**
@@ -60,11 +60,11 @@ void *_ek_realloc(void *ptr, size_t size);
6060
* @note 释放后指针会被置为 NULL,避免悬空指针
6161
*/
6262
#ifndef ek_free
63-
# define ek_free(ptr) \
64-
do \
65-
{ \
66-
_ek_free(ptr); \
67-
ptr = NULL; \
63+
# define ek_free(ptr) \
64+
do \
65+
{ \
66+
_ek_free((ptr)); \
67+
ptr = NULL; \
6868
} while (0)
6969
#endif
7070

@@ -109,15 +109,15 @@ extern tlsf_t ek_default_tlsf;
109109
* @param size: 内存池大小(字节)
110110
*/
111111
# ifndef ek_heap_add_pool
112-
# define ek_heap_add_pool(ptr, size) tlsf_add_pool(ek_default_tlsf, ptr, size)
112+
# define ek_heap_add_pool(ptr, size) tlsf_add_pool(ek_default_tlsf, (ptr), (size))
113113
# endif
114114

115115
/**
116116
* @brief 从默认内存堆移除内存池
117117
* @param pool: 要移除的内存池指针
118118
*/
119119
# ifndef ek_heap_remove_pool
120-
# define ek_heap_remove_pool(pool) tlsf_remove_pool(ek_default_tlsf, pool)
120+
# define ek_heap_remove_pool(pool) tlsf_remove_pool(ek_default_tlsf, (pool))
121121
# endif
122122

123123
/**

L2_Core/utils/inc/ek_ringbuf.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
# include "ek_def.h"
1717

18-
1918
/**
2019
* @brief 环形缓冲区结构
2120
*/
@@ -79,7 +78,7 @@ void ek_ringbuf_destroy(ek_ringbuf_t *rb);
7978
# define ek_ringbuf_destroy_safely(rb_ptr) \
8079
do \
8180
{ \
82-
ek_ringbuf_destroy(rb_ptr); \
81+
ek_ringbuf_destroy((rb_ptr)); \
8382
rb_ptr = NULL; \
8483
} while (0)
8584

L2_Core/utils/inc/ek_stack.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ void ek_stack_destroy(ek_stack_t *sk);
102102
# define ek_stack_destroy_safely(sk_ptr) \
103103
do \
104104
{ \
105-
ek_stack_destroy(sk_ptr); \
105+
ek_stack_destroy((sk_ptr)); \
106106
sk_ptr = NULL; \
107107
} while (0)
108108

L2_Core/utils/inc/ek_vec.h

Lines changed: 69 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
*
6363
* @warning 遍历过程中不能删除元素,否则会导致索引混乱
6464
*/
65-
# define ek_vec_iterate(pos, v) for (pos = 0; pos < v.amount; pos++)
65+
# define ek_vec_iterate(pos, v) for (pos = 0; pos < (v).amount; pos++)
6666

6767
/**
6868
* @brief 从指定索引开始遍历动态数组
@@ -72,20 +72,21 @@
7272
*
7373
* @note 如果 index 超出范围,则从数组末尾开始(不会执行循环体)
7474
*/
75-
# define ek_vec_iterate_index(pos, index, v) for (pos = (index < v.amount) ? index : v.amount; pos < v.amount; pos++)
75+
# define ek_vec_iterate_index(pos, index, v) \
76+
for (pos = ((index) < (v).amount) ? (index) : (v).amount; pos < (v).amount; pos++)
7677

7778
/**
7879
* @brief 初始化动态数组
7980
* @param v 动态数组变量
8081
*
8182
* @note 使用前必须调用此宏进行初始化
8283
*/
83-
# define ek_vec_init(v) \
84-
do \
85-
{ \
86-
v.items = NULL; \
87-
v.amount = 0; \
88-
v.cap = 0; \
84+
# define ek_vec_init(v) \
85+
do \
86+
{ \
87+
(v).items = NULL; \
88+
(v).amount = 0; \
89+
(v).cap = 0; \
8990
} while (0)
9091

9192
/**
@@ -95,12 +96,12 @@
9596
* @note 销毁后动态数组变量仍存在,但内容已清空
9697
* @note 如需重新使用,应重新调用 ek_vec_init
9798
*/
98-
# define ek_vec_destroy(v) \
99-
do \
100-
{ \
101-
ek_free(v.items); \
102-
v.amount = 0; \
103-
v.cap = 0; \
99+
# define ek_vec_destroy(v) \
100+
do \
101+
{ \
102+
ek_free((v).items); \
103+
(v).amount = 0; \
104+
(v).cap = 0; \
104105
} while (0)
105106

106107
/**
@@ -111,22 +112,22 @@
111112
* @note 当容量不足时自动扩容
112113
* @note 扩容策略:小数组翻倍,大数组增加 1/2
113114
*/
114-
# define ek_vec_append(v, val) \
115-
do \
116-
{ \
117-
if (v.cap <= v.amount) \
118-
{ \
119-
uint32_t _temp_for_cap_ex_ = \
120-
(v.cap < VEC_LARGE_THRESHOLD) ? (v.cap ? 2 * v.cap : 8) : (v.cap + v.cap / 2); \
121-
void *_temp_for_new_items_ = ek_realloc(v.items, _temp_for_cap_ex_ * sizeof(*v.items)); \
122-
if (_temp_for_new_items_ != NULL) \
123-
{ \
124-
v.cap = _temp_for_cap_ex_; \
125-
v.items = _temp_for_new_items_; \
126-
} \
127-
else break; \
128-
} \
129-
v.items[v.amount++] = val; \
115+
# define ek_vec_append(v, val) \
116+
do \
117+
{ \
118+
if ((v).cap <= (v).amount) \
119+
{ \
120+
uint32_t _temp_for_cap_ex_ = \
121+
((v).cap < VEC_LARGE_THRESHOLD) ? ((v).cap ? 2 * (v).cap : 8) : ((v).cap + (v).cap / 2); \
122+
void *_temp_for_new_items_ = ek_realloc((v).items, _temp_for_cap_ex_ * sizeof(*(v).items)); \
123+
if (_temp_for_new_items_ != NULL) \
124+
{ \
125+
(v).cap = _temp_for_cap_ex_; \
126+
(v).items = _temp_for_new_items_; \
127+
} \
128+
else break; \
129+
} \
130+
(v).items[(v).amount++] = (val); \
130131
} while (0)
131132

132133
/**
@@ -137,17 +138,17 @@
137138
* @note 移除后,后续元素会向前移动填补空位
138139
* @note 如果索引超出范围,则不执行任何操作
139140
*/
140-
# define ek_vec_remove(v, index) \
141-
do \
142-
{ \
143-
if (index < v.amount) \
144-
{ \
145-
for (uint32_t _temp_for_iter_v_ = index; _temp_for_iter_v_ < v.amount - 1; _temp_for_iter_v_++) \
146-
{ \
147-
v.items[_temp_for_iter_v_] = v.items[_temp_for_iter_v_ + 1]; \
148-
} \
149-
v.amount--; \
150-
} \
141+
# define ek_vec_remove(v, index) \
142+
do \
143+
{ \
144+
if ((index) < (v).amount) \
145+
{ \
146+
for (uint32_t _temp_for_iter_v_ = (index); _temp_for_iter_v_ < (v).amount - 1; _temp_for_iter_v_++) \
147+
{ \
148+
(v).items[_temp_for_iter_v_] = (v).items[_temp_for_iter_v_ + 1]; \
149+
} \
150+
(v).amount--; \
151+
} \
151152
} while (0)
152153

153154
/**
@@ -159,14 +160,14 @@
159160
* @note 时间复杂度:O(1)
160161
* @warning 会破坏数组中元素的原始顺序,仅适用于对顺序不敏感的场景
161162
*/
162-
# define ek_vec_remove_unorder(v, index) \
163-
do \
164-
{ \
165-
if (index < v.amount) \
166-
{ \
167-
v.items[index] = v.items[v.amount - 1]; \
168-
v.amount--; \
169-
} \
163+
# define ek_vec_remove_unorder(v, index) \
164+
do \
165+
{ \
166+
if ((index) < (v).amount) \
167+
{ \
168+
(v).items[(index)] = (v).items[(v).amount - 1]; \
169+
(v).amount--; \
170+
} \
170171
} while (0)
171172

172173
/**
@@ -179,7 +180,7 @@
179180
# define ek_vec_clear(v) \
180181
do \
181182
{ \
182-
v.amount = 0; \
183+
(v).amount = 0; \
183184
} while (0)
184185

185186
/**
@@ -189,24 +190,24 @@
189190
* @note 将容量缩减为当前元素数量,释放多余内存,如果元素数目为0,则会释放items的所有内存
190191
* @note 如果 realloc 失败,则保持原状态不变
191192
*/
192-
# define ek_vec_shrink(v) \
193-
do \
194-
{ \
195-
if (v.amount) \
196-
{ \
197-
void *_temp_for_new_items_ = ek_realloc(v.items, v.amount * sizeof(*v.items)); \
198-
if (_temp_for_new_items_) \
199-
{ \
200-
v.items = _temp_for_new_items_; \
201-
v.cap = v.amount; \
202-
} \
203-
} \
204-
else if (v.items) \
205-
{ \
206-
ek_free(v.items); \
207-
v.items = NULL; \
208-
v.cap = 0; \
209-
} \
193+
# define ek_vec_shrink(v) \
194+
do \
195+
{ \
196+
if ((v).amount) \
197+
{ \
198+
void *_temp_for_new_items_ = ek_realloc((v).items, (v).amount * sizeof(*(v).items)); \
199+
if (_temp_for_new_items_) \
200+
{ \
201+
(v).items = _temp_for_new_items_; \
202+
(v).cap = (v).amount; \
203+
} \
204+
} \
205+
else if ((v).items) \
206+
{ \
207+
ek_free((v).items); \
208+
(v).items = NULL; \
209+
(v).cap = 0; \
210+
} \
210211
} while (0)
211212

212213
#endif /* EK_VEC_ENABLE */

0 commit comments

Comments
 (0)