码迷,mamicode.com
首页 > 编程语言 > 详细

C语言函数声明什么时候可以省略,什么时候不能省?

时间:2019-04-28 20:51:02      阅读:802      评论:0      收藏:0      [点我收藏+]

标签:不能   其他   除了   编译器   一次函数   一个   代码   规则   函数   

在学习C语言函数的时候,老师总会告诉我们函数要写声明,然后再定义。这是个稳健的做法。等我自己学习了其他高级语言以后,回头再来写C,突然就觉得函数要写声明有点麻烦。无意间发现有一次函数没写声明居然编译(GCC 5.3)也通过了,而且都没有报错。于是想起来要好好研究一下这个C语言的函数声明什么时候可以不写,什么时候必须写。

这其实谈不上是技术性问题。就好像讨论i++ 和++i那么无聊。这都是编译器导致的语法问题。说他们都是历史遗留问题都不为过。

但是在C语言学习过程中,你不得不去把这些鬼问题弄清楚。这样在以后面对千奇百怪的C语言代码的时候才能做到内心毫无波动。

有的书上是这么说的,如果函数定义放在main函数前面,可以不用写声明。如果函数放在main函数后面,就规定要写函数声明。这么说没毛病。不过我自己又无聊地尝试了一下,发现了更准确的规则。如果在函数定义在这个函数调用之前,就不需要写声明。否则就要写声明。

关于这个函数定义的位置其实也是个可以摸索的事情。C语言不允许在一个函数中定义其他函数,但是main函数除外。我发现可以在main函数中定义函数。如果你在main函数中定义函数,如果在函数被调用之前就定义了这个函数,那么就不需要声明了,这样编译连警告都没有,如果你在main函数中定义函数,而函数定义的位置比函数调用还要后,那么就无法通过编译了。进一步做无聊事情,假设我们在函数调用语句之后再定义函数,这个条件下有两种情况(单文件下),在main函数外面定义这个函数,编译会出警告信息,但是可以通过。如果是在main函数里面定义的。那就编译就会有警告+错误信息。

同样的关于函数声明的位置也是可以无聊地摸索一下。因为函数声明可以放在main函数外面,也可以放在main函数里面。我说可以放在main函数外面肯定说的是放在main函数上面。这个是正常做法。有的书会把声明放在main函数里面,也是可以的。只要只要声明函数的位置在函数调用前面就OK了。由此可以弱弱地推测出,C编译器是看到了声明,然后去寻找对应函数定义进行编译。如果没有声明,但是函数定义写在函数调用前面,那这个函数定义也比函数调用的代码先一步编译了也没问题了。这个弱弱地推测,就可以解释我以上无聊的实验结果了。

当时除了我这样无聊的初学者,谁会一直在main函数里写函数呢?

 

C语言函数声明什么时候可以省略,什么时候不能省?

标签:不能   其他   除了   编译器   一次函数   一个   代码   规则   函数   

原文地址:https://www.cnblogs.com/ligongzi/p/9902199.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!