-2

这确实是一个简单的问题,指的是 Linux(而不是 Windows 或 Mac)。

如何从 C 或 C++ 编译器生成警告消息,其中必须包含“可疑”一词,并且必须引用 ( -Wmain)。


(更新)

谢谢 Boann - 我收到了一些警告,但我也收到了错误 - 错误:'::main' 必须返回 'int'。

我问这个问题的原因是一周前我的编译器(GCC 4.8.1)出现了这个警告说“可疑”,它是由 Wmain 引起的。所以我把 -Wno-main 和警告消失了,它编译得很好。就在最近它开始抱怨使它成为一个实际的错误而不是编译。所以我有点担心母船不知何故在我不知道的情况下通过互联网秘密更新了我的编译器,并将其更改为将其视为错误。(我可能使用 'int4' 作为返回类型,我永远将其 typedef'd 为带符号的 long int。

我注意到 g++ 手册页中引用了 -Wmain ,所以它必须是为了某些东西,但是有什么警告不会被错误推翻?


在 g++ 可执行文件的偏移量 557284(十进制)处,我发现“警告关于“main”的可疑声明。

4

3 回答 3

2

物有所值,

struct suspicious {};

int main(suspicious) {}

输出g++ -Wall,GCC 4.8.2:

警告:'int main(suspicious)' 的第一个参数应该是 'int' [-Wmain]

于 2014-08-24T20:23:14.873 回答
1

我刚刚下载了gcc 4.8.1的源代码,并在所有相关文件中搜索了“可疑”一词。

发生了很多次,但据我所知,C 或 C++ 源文件的错误消息不可能包含“可疑”一词。有可能但不太可能进行本地修改。

您是否可能对错误消息所说的内容有误?如果您有包含错误消息的日志,请更新您的问题以显示您收到的确切消息。

如果您担心您的编译器可能在您不知情的情况下被更新,您可以检查编译器可执行文件及其调用的任何程序的时间戳(用于gcc -v检查)。但是 gcc 本身不会自动更新自己。如果您在由其他人管理的系统上使用它,则需要自动更新。如果您自己管理系统,您可能已将其配置为无需人工干预即可更新软件;如果是这样,那不是 gcc 问题。我不知道你说的“母舰”是什么。

于 2014-08-24T22:28:28.233 回答
1

如果您引用-WmainGCC 的参数,您会通过给出main奇数参数、奇数返回类型或给它static链接来获得警告。这将做到:

static float main(float x) {
    return 0;
}

编译时gcc -Wmain,它会显示这些警告;但是,它们实际上并不包含“可疑”一词:

warning: return type of 'main' is not 'int'
warning: first argument of 'main' should be 'int'
warning: 'main' takes only zero or two arguments
warning: 'main' is normally a non-static function
于 2014-08-24T19:33:35.877 回答