【问题标题】:Implementation of function not needed and no warning given [duplicate]不需要执行功能,也没有给出警告[重复]
【发布时间】:2014-05-27 06:24:28
【问题描述】:

我想知道是否可以设置任何编译器标志来处理这种情况。假设我有以下文件:

啊.h

class a
{
    public:
    int lala(void);
    int lala2(void);
};

a.cpp

#include "a.h"

int a::lala(void)
{
    return 5;
}

ma​​in.cpp

#include <iostream>
#include "a.h"

int main()
{
    a thi;
    std::cout << thi.lala() << std::endl;
    return 0;
}

这里的问题是函数 lala2 没有实现,虽然它没有使用,但甚至没有发出警告。

所以我不知道它是如何导致这种情况的,但基本上在大部分代码中都有一个未实现的功能。我只是想知道是否有任何编译器标志可以让我们选择它?使用 g++ -pedantic -Wall 是不够的。

【问题讨论】:

  • 如果您尝试使用此方法,您可能会收到链接器错误。
  • @rhughes,正确,但我想得到一个编译器警告,以便我可以使用这个函数。
  • 编译器看不到函数是不需要也没有定义的。这只能在链接阶段完成。

标签: c++ compiler-warnings


【解决方案1】:

编译器无法做到这一点。编译器会一一编译源文件。您可能在一个源文件中有 lala 的实现,而在另一个源文件中有 lala2 的实现。编译器无法知道其他地方是否有 lala2 实现。

如果您尝试使用 lala2,链接器将显示错误。如果你不这样做,代码就会正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2021-06-17
    • 2018-07-21
    • 2021-03-28
    • 2020-04-26
    • 1970-01-01
    相关资源
    最近更新 更多