1. c语言 函数声明前extern的用法
个人看法,仅供参考。
(1)别的就是指“这一个”以外的;C盘定义,D盘调用,原则上可以,但是麻烦,写程序应该越简单越好,不提倡这样做;“别的”原则上没有限定几层,但是最好放在同一个文件夹,原因也说了,分开放麻烦。
(2)作用相同,不完全等价。区别在哪呢?include “*.h”
int f();把“*.h”里的所有东西都搬过来(除了f()之外可能还有其他的),那么肯定包含有f();而extern int f();表示你明确知道你要调用的是“*.h”里的f()这个函数,其它你都不需要。
“这么说,如果所有外部函数声明时都加上extern就不需要include “*.h”头文件了?”是的,但是你想想,如果你所有外部函数都要用到的话,你自己手动给所有函数加上extern还是直接一个include “*.h”哪个更方便呢
2. c语言函数声明
假设主函数main()。其他函数void fun(int a,int *b)。
关于函数定义和声明:
在代码中fun函数,有完整函数体的代码就是函数定义部分,比如void fun(int a,int *b){。。。};。
如果没有具体实现的函数体代码(也就是大括号内容),那么就是函数声明。比如void fun(int ,int *);
关于函数声明和调用:
如果fun函数定义在main代码上面。比如:
void fun(int a,int *b){。。。};
int main(){
int a=0,int b=0;
......
fun(a,&b);//这里fun定义代码在main上面,所以可以不需要声明。反之需要先写声明语句
return 0;
}
关于函数局部变量及全局变量:
简单区分:
定义在函数之外的就是全局变量,这个变量所有函数都可以直接使用,并且共用同一个地址。任意函数修改了变量值,其他函数调用也会变。
定义在函数之内的就是局部变量,局部变量只属于该函数,其他函数即使定义了同样名字的变量,这两个变量也不同地址,互不相干。
比如:
int a;//这就是全局变量,作用域下所有函数共用
int main()
{
int b;//这就是局部变量,只在本函数有效,如果想在调用fun函数时让fun也使用该变量,需要把这个变量的地址作为参数传递过去。
printf("%d",b);
return 0;
}
注意:c语言中允许局部变量和全局变量同名,但是同名的局部变量会屏蔽全局变量,实际代码避免同名。
关于函数传值和传址:
如函数void fun(int a,int *b){..........};这里形参a 和*b,分别表示一个值和一个地址
所以在调用该函数时,比如:
int main()
{
int c,d;
fun(c,&d);//这里调用就对应上面形参类型,第一个参数传递了c的值(传值),第二个参数传递了d的地址(传址),这里c和&d,叫做实参。当fun函数运行时改变了a和b指向地址的值,对应main函数中c的值不变,d的值改变。
return 0;
}
顺带一说:局部变量,在函数运行结束后会自动释放,所以想把局部变量地址作为返回值,需要用malloc函数申请。(这里看不懂可以暂时忽视)
3. C语言中的“输入端的预期声明或语句” 是什么意思
你说的应该是前向引用声明吧。也就是在变量或者函数使用前需要先定义一下。C语言中的“输入端的预期声明或语句” 是什么意思
4. 在C语言中声明和定义有什么区别
C语言变量的定义和声明的不同之处:
1、变量在使用前就要被定义或者声明;
2、在一个程序中,变量只能定义一次,却可以声明多次;
3、定义分配存储空间,而声明不会。
(4)c语言前向声明扩展阅读:
变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在程序中,变量有且仅有一个定义。
声明:用于向程序表明变量的类型和名字。
定义也是声明:当定义变量的时候我们声明了它的类型和名字。可以通过使用extern声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。
extern声明不是定义,也不分配存储空间。事实上它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。
只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern。
任何在多文件中使用的变量都需要有与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明(而不是定义)。
5. C语言里声明是什么意思
什么是声明:有两重含义,如下:
第一重含义:告诉编译器,这个名字已经匹配到一块内存上了(伊人已嫁,吾将何去何
从?何以解忧,唯有稀粥),下面的代码用到变量或对象是在别的地方定义的.声明可以出
现多次.
第二重含义:告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量
名或对象名.比如你在图书馆自习室的某个座位上放了一本书,表明这个座位已经有人预
订,别人再也不允许使用这个座位.其实这个时候你本人并没有坐在这个座位上.这种声
明最典型的例子就是函数参数的声明,例如:
void fun(int i, char c);好,这样一解释,我们可以很清楚的判断:a)是定义;b)是声明.
6. 在c语言中,所有函数调用之前都必须声明,为什么不对
#
include
"math.h"
#
include
<stdio.h>
void
get_equa(float
a,float
b,
float
c)
//注释:声明空类型float函数get_equa()
{
if(a==0.0)
//注释:系数a的值为0的情况.
if(b==0.0)
//注释:a值为0的情况下b也为0.
printf("data
error,
no
answer
to
show!");
//注释:非一元二次方程式,打印“data
error...”
else
printf("the
equation
only
have
one
root:
%f",-c/b);
//注释:打印唯一解.
else
{
double
disc,term1,term2,root_1,root_2,two_a;
//注释:声明必要double型变量.
//注释:一元二次方程式的根有两个,表达式这里不好写,但数学上是这样读的:x
等于
2a
分之
负b
加减
根号下
b平方
减
4ac.(就是那个表达式的读法.)
disc=b*b-4*a*c;
two_a=2*a;
term1=-b/two_a;
term2=sqrt(fabs(disc))/two_a;
//注释:根号下b平方减4ac除以2a的值.
root_1=term1-term2;
root_2=term1+term2;
if(disc<0)
printf("the
equation
only
have
the
complex
root:\n
real
part
=%f,
imag
part
=%f",term1,term2);
//注释:打印虚部和实部的值.
else
printf("the
equation
have
two
roots:\n
one
is
%f\n
another
one
is
%f",root_1,root_2);
//注释:打印它的两个实数根.
}
}
void
main()
{
float
a,b,c;
printf("please
input
your
equation's
a,b,c:\n");
scanf("%f%f%f",&a,&b,&c);
get_equa(a,b,c);
}
代码测试通过。。有什么不懂的可以问我。。嘿嘿。
7. C语言中,函数调用前是否必须需事先声明
这个程序可以这样分析,其实很简单,首先你要添加上去#include<stdio.h>这个头文件,其次你就这样记忆:要是main()函数在被调用函数的前面,也就是像你所说的这样情况的话,就必须在main()函数前面对被调用函数进行声明才可以正常调用函数,不然编译会出错的,
如果被调用函数出现在在了main()函数的上面,也就是mian()函数和你现在max函数位置调换一下,那么就不必对被调用函数进行声明了,直接调用就可以了。
这样的记忆比较清晰一点,我平时编程是将主函数写在最后,前面写被调用函数,这样就避免了忘记写函数声明而编译出错,希望我的解答能够帮助到你,
8. C语言,为什么我写的的这个函数没有声明,我也能调用呢
这个未声明只是警告,是一种提醒,有些时候不会影响编译,应该尽量可能避免。
以上代码把第11行的内容复制在第1行、第2行之间,末尾再加个分号(;),就可以了,这就是函数的声明。
9. C语言中在什么情况下调用自定义函数前需要先声明
编译器是按顺序编译的,如果有以下情况:
void a()
{
b();//编译器在这里还未编译b(),所以此时函数b是不存在的。
}
void b()
{}
打个比方
int a=b; //报错
int b=0;
其实是一个道理。
变量只能先定义再使用。