在C中定义类似函数的宏时,使用{}对或()对有什么区别吗?

sol*_*tim 4 c c-preprocessor

例如:

#define FOO(x)     (printf(x))
Run Code Online (Sandbox Code Playgroud)

#define FOO(x)     {printf(x)}
Run Code Online (Sandbox Code Playgroud)

似乎两者都可以用于预处理,但哪个更好?

Don*_*ows 6

如果您将宏视为表达式,请使用该()表单.

如果您将其视为命令(并且从不作为表达式),则使用该{}表单.或者更确切地说,do{}while(0)在以下关键字附近使用时,使用具有较少替代危险的表格if:

#define FOO(x) do {    \
    printf(x);         \
} while(0)
Run Code Online (Sandbox Code Playgroud)