常量或涉及常量的转换表达式周围的括号

Pav*_*kin 1 c parentheses

有时我会看到这样的代码:

#define X1   (13)
#define X2   ((size_t)13)
Run Code Online (Sandbox Code Playgroud)

据我了解,(外部)()在这里是多余的。那是对的吗?


UPD:某些软件开发指南可能需要它。

例如:MISRA C:2004,规则 19.4(必需):

C 宏只能扩展为大括号初始化程序、常量、括号表达式、类型限定符、存储类说明符或 do-while-zero 构造。

然而,MISRA C:2012 有:

#define MY_NULL_2 ( void * ) 0
#define sqrt( x ) ( _BUILTIN_sqrt ( x ) )
Run Code Online (Sandbox Code Playgroud)

ric*_*ici 5

我不认为第一个例子需要括号,但总是给宏体加上括号是一个合理的习惯。

如果从定义中删除外括号然后在上下文中调用它,第二个将产生意外的分组X2[a]