此问题已在此处有答案:
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
谢谢。
1条答案
按热度按时间0pizxfdo1#
var
是一个全局变量。编译器无法知道该变量将不会被其他翻译单元使用,而不是当前正在编译的翻译单元。