是的,函数也应该是先定义后引用才对,如果引用前未定义,解决的办法就是在引用前声明一下函数原型就可以了。但是你也许发现了,在你曾经的练习代码中,你有时候没有遵循以上原则,似乎也编译通过并得到了正确的结果。
为什么要声明:
如果我的引用在定义之前发生,那么我通过原型去声明一个函数的意义在于告诉编译器,我的这个函数的参数个数,每个参数的类型,以及返回值类型。由此,在参数入栈的时候才会分配合适的空间给每个参数。
如果你在引用之前并未声明函数,并且函数的定义滞后于引用,这在gcc中这并不会引起编译错误。首先在引用发生时编译器通过函数名称可以在将来对应到函数的入口点(如果你压根儿没定义该函数,那就另当别论了),其次编译器会在无法确定该函数的参数类型的情况下,视其为int类型,包括返回值通通视为int类型,所以如果你的实际参数类型宽度大于int的话,会导致截断发生,因此,你得到正确结果的可能性渺茫,(周同学发生的问题就是float被强制转换为int了。)
以上观点纯属我个人通过技术方法验证后的推理,并没有仔细阅读权威的文档(没去找),所以仅供参考!如果你有别的观点请回复探讨,共同进步!
你的知识只有和大家分享了你才能获得快感!!!!