4.1.3 函数的声明
函数在调用前需要定义,不然在编译后的链接时期就会出现链接错误。其实还有一点,就是函数在调用前需要进行声明,不然编译时会出现错误或警告。例如在使用标准库的 printf 函数时,不去包含“stdio.h”这个头文件,代码如下:
现在使用 gcc 编译器对其进行编译,会出现如下的警告信息:
test.c: In function 'main': test.c:3:2: warning: implicit declaration of function 'printf' [-Wimplicit -function-declaration]
问题就在于调用 printf 函数前没有对它进行声明。那怎么进行函数的声明呢?其实很简单,将函数的函数头部分取出来,后面加上一个分号,这就是函数的声明。
下面把 printf 函数的声明放在调用 printf 函数之前:
在函数声明中,形参的变量名是可以被省略的,但形参的数据类型不可省略。先不用关心 printf 函数声明中的那些“奇怪”的参数,在后面的章节中会有介绍。
保存源文件,再次对它进行编译,这回就没有任何错误或警告的信息了。在前面的案例中,我们调用 printf 函数时并没有进行函数声明,只是包含了“stdio.h”头文件,其实在这个头文件中就包含了 printf 函数的声明。
这里需要注意的是函数的定义已经包含了函数的声明,也就是说在调用函数之前的代码中,已经有了函数的定义,这时就不需要再进行单独的函数声明了。但如果函数的定义是在函数调用的代码之后,还是需要进行函数声明的,如图 4.3 所示。
图 4.3 函数的声明情况
最后需要说明的是,在 C 语言中,函数声明的位置和次数是无限制的。我们可以把函数声明和函数的调用放在同一个函数中,那么在该函数中,函数声明可以覆盖之后的所有函数调用,但其他函数中的函数调用仍然需要进行函数声明;也可以把函数声明放于包含函数调用的函数之前,这样函数声明可以覆盖其后的所有函数中的函数调用,如图 4.4 所示。
图 4.4 函数声明的覆盖范围
例如我们把 printf 函数的声明放在主函数的前面,这也是完全可以的:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论