VS2013假设.c文件的未识别符号的外部声明

时间:2014-08-04 20:38:35

标签: c compiler-construction visual-studio-2013

显然在.c文件中,visual studio auto会为未识别的符号生成声明。我尝试使用printf()而不包括stdio.h,以及调用一些随机的asd()函数并且编译时没有错误,只有警告出现编译器假定extern返回int。为了确保我编译了汇编输出,它确实有那些extern声明。当然,链接不成功。

我的问题是,如何为未识别的符号关闭此自动生成声明?我有一些项目要做,这可能会让我感到困惑。

2 个答案:

答案 0 :(得分:3)

这是编译器警告C4013。

http://msdn.microsoft.com/en-us/library/d3ct4kz9.aspx

您可以使用/ we标志设置编译命令,将该特定警告视为错误。

http://msdn.microsoft.com/en-us/library/thxezb7y.aspx

  

/ we n将n中指定的编译器警告视为错误。   例如,/ we4326将警告号C4326标记为错误。

如果您想要保守,您可以将所有警告视为错误。许多团队/项目认为这是最佳实践。

  

/ WX将所有编译器警告视为错误。对于一个新项目,它可能   最好在所有编辑中使用/ WX;解决所有警告会   确保尽可能少的难以找到的代码缺陷。链接器也   有一个/ WX选项。有关更多信息,请参阅/ WX(将链接器警告视为错误)   信息。

答案 1 :(得分:1)

显然在.c文件中,visual studio auto会为未识别的符号生成声明
这不是正确的结论 它不是Visual Studio的问题。它只是来自编译器的警告,它描述了在没有任何实际定义的情况下它对函数所做的假设。

来自 HERE

当你调用一个没有原型的函数时,一些C编译器会假设被调用的函数:

Function's return type is assumed to be int
All parameters are assumed to be declared (i.e. no ... vararg stuff)
All parameters are assumed to be whatever you pass after default promotions, and so on.   

如果没有原型调用的函数符合这些假设,程序将正确运行;否则,这是未定义的行为。

来自 HERE

如果没有指定函数原型,则行为特定于编译器实现的C标准(C90或C99)。高达C90标准,C编译器假定省略的函数原型的返回类型为int。编译器方面的这种假设可能导致未指定的程序行为。

要解决您遇到的问题 ,在Visual Studio中更改任何内容都不是必需的(也不会解决所述问题),而是包含头文件适合您正在使用的功能。