【问题标题】:g++ compiler not generating error/warning for undefined methodsg++ 编译器没有为未定义的方法生成错误/警告
【发布时间】:2020-04-11 18:16:40
【问题描述】:

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


#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() 函数,也没有在任何地方使用。所以,我希望编译器会抱怨这个没有定义。但看不到任何错误/警告。

提前致谢。

【问题讨论】:

  • 什么死代码?这里有什么问题?为什么你希望编译器会窒息呢?
  • @curiousguy 添加了详细信息。感谢您指出。

标签: c++ class undefined-function


【解决方案1】:

通常,链接器只会对使用的未定义符号产生错误。因为你从来没有打电话给Init,所以没有错误。

【讨论】:

  • 有没有办法,我可以显式启用编译器来标记此类问题?
  • 据我所知,有些编译器会针对未使用的私有方法发出警告,但不会针对公共方法发出警告
【解决方案2】:

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

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

该函数甚至没有“使用 ODR”,所以从技术上讲,编译器要求定义是错误的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    相关资源
    最近更新 更多