#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