C语言函数声明何时能够省略,何时不能省?

在学习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函数里写函数呢?语言

相关文章
相关标签/搜索