g ++编译器未为未定义的方法生成错误/警告

时间:2019-12-19 07:11:13

标签: c++ class undefined-function

我有一个具有已声明方法但未在任何地方定义/使用的类。我希望这段代码会产生链接错误,但没有。看起来编译器足够聪明,可以删除无效代码。哪个默认优化正在执行此操作?如何显式禁用它以生成错误?


#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()函数,也未在任何地方使用它。因此,我希望编译器抱怨此未定义。但是看不到任何错误/警告。

谢谢。

2 个答案:

答案 0 :(得分:3)

通常,链接器仅对使用的未定义符号产生错误。因为您从不致电Init,所以没有错误。

答案 1 :(得分:0)

  

看起来编译器足够聪明,可以删除无效代码。

编译器在这里甚至都不是“智能”的。没有使用函数的代码,因此不需要来生成可执行程序。

该功能甚至没有“使用ODR”,因此从技术上讲,编译器要求定义是错误的。