首页 > 小白突然对C语言的函数执行有些不解

小白突然对C语言的函数执行有些不解

能不能给我讲讲C语言的函数执行顺序


先了解一下编译原理


1,测试一下,你把那一句声明删除掉,再运行看看结果;
2,你不想声明就可以把f()函数放在主函数 main前面;
3,编译器会预读隐含一个声明,如果你与编译器声明不一样会产生一个警告。


函数的定义是顺序无关的,编译后的执行程序永远都会先从main函数进去,这是程序的入口


C语言是静态编译~

第一个void f(void);是告诉编译器:“我的程序接下来要用到函数f(),但是我现在还不想写它的实现方式,留在最后写,你遇到这个f()函数的调用,先不要报错,到最后我会告诉你f()函数怎么实现”

然后main函数里调用f(),编译器就知道程序里定义了这个函数


c语言是都是从main函数来执行,当执行到里面第一行时,执行f()函数,这时候会去找f()函数,如果f()函数没有声明直接定义的话,好像得在main()函数之前吧,如果有声明,声明在main函数之前,定义可以随意。只要保证声明在定义前面即可。mian函数的位置和f()函数的定义位置无关,只要找的到即可。我是这么理解的。好久没学C了。


补充两点原因吧:

C 语言是强类型的语言,所有函数和变量都要先定义后使用。但是当多人分工合作的时候有可能用到别人定义的函数。这个时候编译器就无法知道这个函数的类型,无法在编译的时候检查调用是否正确。
所以就在自己的代码了写一个声明,表示这个函数会在有定义,它的定义类型是这个样子。这样就编译器就能检查函数类型和留下合适的代码处理参数传递。

C 语言是一个比较古老的语言。。。在那年代哪有人敢乱用内存,所以编译器只会扫描一遍代码。即使在同一个文件里定义,虽然你后面定义了f,但是编译到main 的时候编译器是不知道后面定义了 f 的,所以需要在前面写一个声明,这样编译器才会知道这个函数的类型,检查调用方式是否正确,以及编译main的时候就编译出调用f 的代码。而不用等找到f之后再回来修改此处代码(而且这种修改可能会导致其他地方的修改)。

如今这个年代,许多语言都是支持,如果写在一个文件里,函数定义是可以写在后面而前面不需要声明的。


画了张图,结合上面的答案理解理解吧。。
c程序来说,如上面所说是编译生成二进制的可执行程序,当执行的时候其实一切都是准备好的了,所以不会出现你说的f还没出来无法执行的问题
对其他语言来说就算附近没有找到f的定义,我们可以使用其他方法寻找,总之 不会跳过f去执行其他的,这个逻辑是不会变的

【热门文章】
【热门文章】