//自己一开始没注意这个问题,自己动手写一个简单的程序时才发现自己对此问题只是有点以前看书后剩下的模糊的印象,并不是十分清楚,所以弄个明白。这件事也告诉我:看起来再简单的小事中也可能隐含着你所不知道或者不了解的知识,一定要多动手,实践过程中才会发现问题,从而掌握更多东西,只看一遍甚至几遍,或许你也留意不到自己不会的细小的问题。加油!并且,祝愿祖国母亲生日快乐!
·······································································
总结
1.在调用的函数前定义函数,此时可以不需要声明
2.在调用的函数前声明
3.在调用的函数里面也可以声明
4.在其他文件的头文件*.h文件里面声明,然后*.c文件直接调用头文件也可以。
以上,static函数慎用(它只在定义声明 它的文件中可见,而普通函数默认是extern的)
··································································
自己的总结:
1.函数在使用之前要声明
当函数定义放在main函数之后时,函数声明可以在main函数之前,也可以在main函数里面(只要在(首次)调用此函数的语句之前的任意位置处声明都可以,一般都在main函数开头处声明)
2.当函数定义在main函数之前时,main函数里面就不用再次声明了,直接调用即可。
3.当函数定义的函数体比较长的时候,一般把定义写在main函数之后,声明写在main函数里面或者前面。
下面代码是验证函数声明和函数指针用法的例子:
#include<iostream>
using namespace std;
int max(int a,int b)
{
return a>b?a:b;
}
int min(int,int);
int main()
{
//int min(int,int); //可以
int a=11,b=12,c,d,e;
int (*p1) (int ,int);
int (*p3) (int ,int);
int (*p2) (int ,int,int);
p1=max;
//c=*p1(a,b); //这里的*p1上不加括号可以吗 ,不可以
//否则编译错误:[Error] invalid type argument of unary '*' (have 'int')
c=(*p1)(a,b);
p1=min;
d=(*p1)(a,b);
cout<<"c="<<c<<" d="<<d<<endl; //结果:c=12,d=11
/*p2=max; //不对,报错:没有把函数max转化为具有三个参数的函数,所以函数指针要与对应的
指向的函数的返回值和形参类型和个数都要一致
c=(*p2)(a,b); */
p3=max;
e=p3(a,b); 使用函数指针调用函数max
cout<<"e="<<e<<endl; //结果:e=12
//说明也可以直接用函数指针的名字来代替函数名字,或许在自己定义的函数名字很长时,用简短的函数指针名更方便吧
return 0;
}
int min(int a,int b)
{
return a<b?a:b;
}
···································································
网上一些问答:
原则:使用函数前,必须声明.
所以你说的放在main之后,是不可能的.
你说的应该是函数定义吧.函数定义放在哪都可以,你觉得在哪容易找就放哪,全凭coder,没有规定.
追问
不好意思,表达不好,一种是在main{}里边的开头,一种是在main的上边,也就是在主函数外
追答
这个跟声明一个变量是一个性质的,区别就在于变量的生命周期不一样。
总结上面:函数声明可以在main里面,也可以在main外面。
········································································
如果放在main之前,就可以直接定义这个函数:
void func(int arg) {
…;
}
main() {
func();
}
如果定义放在main之后就要在main之前先声明这个函数:
void func(int);
main() {
func();
}
void func(int arg) {
…;
}
·······································································
C语言的子函数声明一定要写在主函数之前吗?
怎么有些地方写在调用函数之前(即函数体最前面)就可以?
回答:
只要在你调用函数前,能让编译器找到你的调用函数的信息就可以了,并不一定是要在前面的,不过作为一个良好的编程习惯来说,统一将自定义函数的声明写在前面是好的 ,而定义放在后面
·····························································