考虑这段代码:
#define STC_ASSERT(X,Msg) \
(!!sizeof(struct{char STC_ASSERT;_Static_assert((X),Msg "");}))
#define A 43
#define B 42
#define C (STC_ASSERT(A-B>=0,"")?(A-B):0)
enum { c = C };
int main()
{
STC_ASSERT(1,""); //can this not generate a warning on gcc?
}
在STC_ASSERT
_Static_assert
包装器中是否可以做 内的任何操作,以防止main
中的行在编译时生成-Wunused-value
警告与gcc -Wall -Wextra
?
(_Pragma
和GCC diagnostic push/pop
在这里不起作用。对于#define FOO 42
这样的宏,将其包含在表达式语句(({ 42; })
)中可以解决问题,但是
enum
定义)的上下文中使用该宏。