1 / 4
文档名称:

C语言中使用extern修饰函数要注意.doc

格式:doc   大小:20KB   页数:4页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C语言中使用extern修饰函数要注意.doc

上传人:zxwziyou8 2021/12/1 文件大小:20 KB

下载得到文件列表

C语言中使用extern修饰函数要注意.doc

相关文档

文档介绍

文档介绍:C语言中使用extern修饰函数要注意
用extern修饰函数是表示被修饰的函数定义在当前文件外,而该函数用extern声明类型后就可以被当前文件调用了。使用extern修饰某函数时,对该函数的调用是在连接阶段才被处理的。下面我们看一段代码。
/***********************************************
 *
 ***********************************************/
#include <>
void fun (int n)
{
 printf("%d/n");
}
/***********************************************
 *
 ***********************************************/
extern void fun (void);
int main ()
{
 fun();
 return 0;
}
着两个文件能编译连接到一起吗?答案是肯定的,而且不会出现警告。那我们运行这个程序看看什么结果:
C:/>
2367460
这个数从哪来的?不知道。这是因为我们调用了一个需要参数的函数而没有传递参数给它,而这个函数还傻乎乎的以为传过了参数,从寄存器里读出它的参数就去干活了。那个寄存器里是什么值?谁也说不准。如果fun函数的参数是作为指针使用……,啊!麻烦大了!
要解决问题,对于上面的小程序,我们直接冲过去改掉就成了。但是如果你的程序里有1000个文件,平均每个文件5000行(真正大的项目要比这大的多),那你还能一行行检查下去吗?如果调试过程中出了问题而你还不知道是这个原因导致的,如果你的程序很少运行到这个地方,……
所以,正确的方法是防患于未然,写代码是养成良好的****惯。
对于使用gcc的朋友,建议总是使用“-Wall”,“-Wall”是一个细心的秘书,他会及时提醒你代码中存在的风险。
尽量避免使用extern修饰函数。一般情况下,如果我们希望某个函数可以被外界使用,就创建一个头文件,在其中声明该函数的类型。哪个程序需要调用这个函数就把它的头文件包含进去。这样一来如果调用的地方使用不当,在编译阶段就会提示错误,也节省了时间。而且,定义函数和声明函数是同一个人做的,出错的机会也就小了。
 
 
变量在讲变量前,先解释一下声明和定义这两个概念。声明一个变量意味着向编译器描述变量的类型,但并不为变量分配存储空间。定义一个变量意味着在声明变量的同时还要为变量分配存储空间。在定义一个变量的同时还可以对变量进行初始化。
局部变量通常只定义不声明,而全局变量多在源文件中定义,在头文件中声明。局部变量在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效。自动变量auto函数中的局部变量,其缺省格式是自动变量类型。例如,在函数体中int b, c=3; 和auto int b, c=3; 是等价的。自动变量是动态分配存储空间的,函数结束后就释放。自动变量如不赋初值,则它的值是一个不确定的值。静态局部变量static静态局部变量是指在函数体内声明和定义的局部变量,它仅供本函数使用,即其