2

当我在 Visual Studio 2010 中创建一个简单的 C 程序时, http://debugmode.net/2012/02/06/how-to-write-and-run-ac-program-in-visual-studio-2010/

我删除了“#include < stdio.h >”,

我的程序仍然成功运行,我不明白这怎么可能?

任何帮助表示赞赏。问候,

4

4 回答 4

2

除非您使用在其中声明的函数,否则 stdio.h 标头不是严格要求的,例如:

http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.12.html

进一步查看代码,我相信当您没有原型时的默认行为是假设 int 返回类型并从在这种特殊情况下有效的参数类型派生参数类型。但这通常是一种不好的做法,应该避免。

如果它通过编译器/链接器而没有任何警告,您可能需要检查您的环境设置。很容易忘记包含标题,如果您没有注意到它可能会导致很多意外且难以追踪的副作用。

于 2012-12-12T05:02:55.023 回答
1

包含标准头文件的主要目的是将标准函数的声明包含到源文件中。

然而,最初的标准 C 语言 (C89/90) 不要求在调用函数之前声明函数(除了可变参数函数,它必须使用原型预先声明以避免未定义的行为)。出于这个原因,只要我们谈论的是非可变函数调用,完全可以在不预先声明标准函数的情况下编写正确的程序,即不包括标准头文件。

例如,strcmp使用两个char *参数调用函数在 C89/90 中是完全合法的,无需预先声明strcmp. 同时,printf如果您希望您的程序保持为具有已定义行为的有效 C 程序,则必须使用原型预先声明。

于 2012-12-12T05:10:20.720 回答
0

该头文件提供了许多常用函数和宏的原型。

如果您不调用任何这些函数或宏,那么您就不需要它。如果您确实调用它们,只要您链接到正确的库,它仍然可以工作。但是,如果编译器没有这些定义,您可能会收到一些编译器错误或警告。

于 2012-12-12T05:03:07.657 回答
0
#include < stdio.h >

它是一个称为标准输入输出文件的头文件。输入、输出函数都写在这个文件中。诸如此类的功能printf,scanf。请参阅此http://computer.howstuffworks.com/c2.htm

于 2012-12-12T05:14:34.107 回答