为什么GCC和Clang不会对C++中未使用的常量变量产生警告?

cld4siwp  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(141)

此问题已在此处有答案

gcc compiler option to warn on unused global variables defined outside of main in C(2个答案)
昨天关门了。
我有以下代码示例:

class Myclass
{
public:
    Myclass(int a): m_a {a} {
        m_a += 2;
    }

private:
    int m_a;    
};

const Myclass var = 3;

int main()
{

}

我可以编译这段代码,gcc和clang都没有引发任何“unused-const-variable”警告,这对我来说很奇怪。为什么编译器在这种情况下没有引发“unused-const-variable”?
此外,使构造函数“constexpr”产生以下行为:对于GCC:仍然没有“unused-const-variable”警告。对于Clang:它开始引发“unused-const-variable”。
所以,另一个问题是:为什么编译器的行为彼此不同?哪一个是最正确的?
使用的GCC版本:11.3.0使用的Clang版本:14.0.0-1
clang++ -c -stdlib=libc++ -std=c20 -Wall -Wextra test.cpp -o test.o
GCC情况下使用的命令:
g
-c -std=c++20 -Wall -Wextra test.cpp -o test.o
谢谢。

0pizxfdo

0pizxfdo1#

var是一个全局变量。编译器无法知道该变量将不会被其他翻译单元使用,而不是当前正在编译的翻译单元。

相关问题