g++ 编译器不为未定义的方法生成 error/warning
g++ compiler not generating error/warning for undefined methods
我有一个 class 有声明的方法但没有 defined/used 任何地方。我预计这段代码会产生链接错误,但它没有。看起来编译器足够聪明,可以删除死代码。哪个默认优化正在执行此操作?如何明确禁用它以生成错误?
#include <iostream>
using namespace std;
class Base{
public:
int x;
string name;
void set(int val){ x = val;};
int get(){ return x;}
void Init();
};
int main() {
Base base;
base.set(10);
cout << base.get() << endl;
return 0;
}
EDIT1:此处未定义 Init() 函数,也未在任何地方使用。所以,我希望编译器抱怨这个没有定义。但是没有看到任何 error/warning。
提前致谢。
通常链接器只会为使用的未定义符号产生错误。因为您从不调用 Init
,所以没有错误。
Looks like compiler is smart enough to remove dead code.
这里甚至没有编译器 "smart"。没有使用函数的代码,因此不需要生成可执行程序。
该函数甚至不是 "ODR used",因此从技术上讲,编译器要求定义是错误的。
我有一个 class 有声明的方法但没有 defined/used 任何地方。我预计这段代码会产生链接错误,但它没有。看起来编译器足够聪明,可以删除死代码。哪个默认优化正在执行此操作?如何明确禁用它以生成错误?
#include <iostream>
using namespace std;
class Base{
public:
int x;
string name;
void set(int val){ x = val;};
int get(){ return x;}
void Init();
};
int main() {
Base base;
base.set(10);
cout << base.get() << endl;
return 0;
}
EDIT1:此处未定义 Init() 函数,也未在任何地方使用。所以,我希望编译器抱怨这个没有定义。但是没有看到任何 error/warning。
提前致谢。
通常链接器只会为使用的未定义符号产生错误。因为您从不调用 Init
,所以没有错误。
Looks like compiler is smart enough to remove dead code.
这里甚至没有编译器 "smart"。没有使用函数的代码,因此不需要生成可执行程序。
该函数甚至不是 "ODR used",因此从技术上讲,编译器要求定义是错误的。