在gcc中禁用内联警告中的静态?

pieyvz9o  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(125)

我想在不使用-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;
}
h43kikqp

h43kikqp1#

6.7.4.3:
具有外部链接的函数的内联定义不应包含具有静态或线程存储持续时间的可修改对象的定义,并且不应包含对具有内部链接的标识符的引用。
警告是正确的。但是GCC & clang开发人员已经决定,如果您明确表示希望inline函数也具有外部链接(并引用静态对象),则不要发出此警告,因为它表明您知道自己在做什么。
不要使警告静音--只给予编译器一个提示,表明此构造是有意的
因此,如果需要外部链接,则将其声明为extern;如果不需要,则声明为static

static int data[]={1,2};
extern inline int test() {
    return data[0];
}

https://godbolt.org/z/vqzW335x4

相关问题