我想在不使用-w
的情况下禁用gcc给我的警告。怎么做?下面显示了如何使用clang的示例
#ifdef __clang__
#pragma GCC diagnostic ignored "-Wstatic-in-inline"
#else
//What do I write for gcc?
#endif
static int data[]={1,2};
inline int test() {
return data[0];
}
int main() {
return test() - 1;
}
1条答案
按热度按时间h43kikqp1#
6.7.4.3:
具有外部链接的函数的内联定义不应包含具有静态或线程存储持续时间的可修改对象的定义,并且不应包含对具有内部链接的标识符的引用。
警告是正确的。但是GCC & clang开发人员已经决定,如果您明确表示希望
inline
函数也具有外部链接(并引用静态对象),则不要发出此警告,因为它表明您知道自己在做什么。不要使警告静音--只给予编译器一个提示,表明此构造是有意的
因此,如果需要外部链接,则将其声明为
extern
;如果不需要,则声明为static
。https://godbolt.org/z/vqzW335x4