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",因此从技术上讲,编译器要求定义是错误的。