【发布时间】:2019-08-20 11:11:25
【问题描述】:
我有以下宏:
#define oslock_TryAcquire(pLock) { \
INITIALIZED_ASSERT(pLock) \
acquire(pLock)}
编译时我得到:
error: expected expression before ‘{’ token
#define oslock_TryAcquire(pLock ) { \
更新: ^ 我收到“跟进”错误:
note: in expansion of macro ‘oslock_TryAcquire’
if(!oslock_TryAcquire(&pLock)){
^~~~~~~~~~~~~~~~~~~~~~
我不明白什么是问题?将得到glsd的建议
【问题讨论】:
-
问题可能出在您使用宏的地方。请为此提供一个示例。
-
错误可能在上下文中。宏定义本身是正确的。请显示实际重现问题的最小源代码。
-
请创建minimal reproducible example 向我们展示。并包括 full 和 complete 错误输出。
-
与编译错误无关,每次函数调用后都需要一个分号。
-
你有它......你不能有例如
if ({some statements}),这只是无效的 C。一些编译器具有 non-portable extensions 允许将语句作为表达式。例如GCC have it。我真的不建议你使用这样的扩展。请记住,宏是不是函数。也许你真正想要的是一个实际的(可能是inline)函数?
标签: c compiler-errors macros