关于调用函数
对被调用的函数必须要说明函数原型么?如果我把调用的函数定义在main函数之前可以不?(编译器通过了也能运行,但我想知道这样规范么,还是说有什么弊端)函数原型的位置是不是在...
对被调用的函数必须要说明函数原型么?如果我把调用的函数定义在main函数之前可以不?(编译器通过了也能运行,但我想知道这样规范么,还是说有什么弊端)
函数原型的位置是不是在main函数之前或main函数里面调用该函数之前都可以?
是说只要有用到调用函数的地方都在main函数之前先声明这样最规范
我靠~我发现书再往后看看就说到这几个问题了~
睡觉了~明天回来看看 展开
函数原型的位置是不是在main函数之前或main函数里面调用该函数之前都可以?
是说只要有用到调用函数的地方都在main函数之前先声明这样最规范
我靠~我发现书再往后看看就说到这几个问题了~
睡觉了~明天回来看看 展开
4个回答
展开全部
这个没有什么相关规范纯粹看个人爱好,不过:
首先声明可以无限次,但是定义只能有一次。编译器编译的时候是一行一行的顺序扫描,当读取到 函数的声明或者定义的时候,编译器才会知道有这么个函数,这样你在后面的函数中才可以调用这个函数。如果你在调用一个函数之前没出现过相关定义,编译器怎么知道有没有这个函数?
因此,我建议你每一个函数都在main函数之前声明一次,main作为第一个实现的函数。因为当程序中有很多函数的时候,相互的调用关系可能非常复杂,你把这个函数放在前面但是这个函数调用了一个函数又在后面。。。。。所以说这是一种良好的习惯,至于上面那个人说的节约几行代码,纯粹是扯淡。节省代码不能以降低程序的质量为代价。
比如下面的代码,你说谁放在前面?怎么放都不可以(实际中不可能出现这种情况,我举个例子,更浅显的是A中调用B,B中调用A)
void A(){
B();
}
void B(){
C();
}
void C(){
A();
}
首先声明可以无限次,但是定义只能有一次。编译器编译的时候是一行一行的顺序扫描,当读取到 函数的声明或者定义的时候,编译器才会知道有这么个函数,这样你在后面的函数中才可以调用这个函数。如果你在调用一个函数之前没出现过相关定义,编译器怎么知道有没有这个函数?
因此,我建议你每一个函数都在main函数之前声明一次,main作为第一个实现的函数。因为当程序中有很多函数的时候,相互的调用关系可能非常复杂,你把这个函数放在前面但是这个函数调用了一个函数又在后面。。。。。所以说这是一种良好的习惯,至于上面那个人说的节约几行代码,纯粹是扯淡。节省代码不能以降低程序的质量为代价。
比如下面的代码,你说谁放在前面?怎么放都不可以(实际中不可能出现这种情况,我举个例子,更浅显的是A中调用B,B中调用A)
void A(){
B();
}
void B(){
C();
}
void C(){
A();
}
展开全部
main也是一个函数,如果在main之前声明,则等级与main同级。
规范,一般分成三个部分:
//1、预声明。先用一句话定义要用到的函数(都是全局函数,每个函数都可以互相调用),什么都不要写。
void funA(int a);
int funB(float b);
float funC();
...
//2、主函数体。然后写main:
int main(void) {
...
}
//3、重声明。然后再详细定义funA(), funB(), funC()...
void funA(int a) {
...
}
int funB(float b) {
...
}
float funC() {
...
}
...
这样的话,不管你怎么相互调用,函数都知道这个函数已经声明过了,因为在之前有个简短的一句话声明,这个很重要,一定要依照这样的规范,不然会出现函数未定义这样的错误。
规范,一般分成三个部分:
//1、预声明。先用一句话定义要用到的函数(都是全局函数,每个函数都可以互相调用),什么都不要写。
void funA(int a);
int funB(float b);
float funC();
...
//2、主函数体。然后写main:
int main(void) {
...
}
//3、重声明。然后再详细定义funA(), funB(), funC()...
void funA(int a) {
...
}
int funB(float b) {
...
}
float funC() {
...
}
...
这样的话,不管你怎么相互调用,函数都知道这个函数已经声明过了,因为在之前有个简短的一句话声明,这个很重要,一定要依照这样的规范,不然会出现函数未定义这样的错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看个人喜好,不一定要先声明,只要在调用处之前已经定义或声明了都可以的.
如果你希望你的函数在多个源文件中使用,最好还是另外创建一个头文件,包含函数的声明;反之我是喜欢在调用处的代码之前定义函数,可以少写几行代码.
如果你希望你的函数在多个源文件中使用,最好还是另外创建一个头文件,包含函数的声明;反之我是喜欢在调用处的代码之前定义函数,可以少写几行代码.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是这样的:
编译器编译每个c或cpp文件时都是从上到下读源程序的。如果读到了函数的定义,自然就知道了这个函数的存在,之后也就可以使用这个函数。但如果定义在使用之后,使用时编译器不知道这个函数的存在,自然也就要报错。为了让编译器在使用前知道这个函数,就可以在使用前写函数的申明,向编译器指出这个函数的存在。至于如何关联申明与定义,那是链接器的事了(定义完全可能在另一个源文件里)。总之,定义包含的申明的作用,你的写法完全规范。只是如果把一个很长的函数定义写在main函数之前,或许会给读程序的人不便。毕竟,多数人喜欢从main先看程序。
编译器编译每个c或cpp文件时都是从上到下读源程序的。如果读到了函数的定义,自然就知道了这个函数的存在,之后也就可以使用这个函数。但如果定义在使用之后,使用时编译器不知道这个函数的存在,自然也就要报错。为了让编译器在使用前知道这个函数,就可以在使用前写函数的申明,向编译器指出这个函数的存在。至于如何关联申明与定义,那是链接器的事了(定义完全可能在另一个源文件里)。总之,定义包含的申明的作用,你的写法完全规范。只是如果把一个很长的函数定义写在main函数之前,或许会给读程序的人不便。毕竟,多数人喜欢从main先看程序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询