用gcc抑制-无用价值

时间:2018-10-24 17:41:44

标签: c gcc

考虑这段代码:

#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

_PragmaGCC diagnostic push/pop在这里不起作用。对于#define FOO 42这样的宏,将其包含在表达式语句(({ 42; }))中可以解决问题,但是

会阻止在需要整数常量表达式(例如enum定义)的上下文中使用该宏。

0 个答案:

没有答案