好文档 - 专业文书写作范文服务资料分享网站

C语言中变量和函数的声明与定义

天下 分享 时间: 加入收藏 我要投稿 点赞

变量 在将变量前, 先解释一下声明和定义这两个概念。 声明一个变量意味着 向编译器描述变量的类型,但并不为变量分配存储空间。定义一个变量 意味着在声明变量的同时还要为变量分配存储空间。 在定义一个变量的 同时还可以对变量进行初始化。

局部变量通常只定义不声明, 而全局变量多在源文件中定义, 在头文件 中声明。

局部变量 在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效。

自动变量 auto

函数中的局部变量, 其缺省格式是自动变量类型。 例如,在函数体中 int b,

c=3; 和 auto int b, c=3; 是等价的。

自动变量是动态分配存储空间的, 函数结束后就释放。 自动变量如不赋 初值,则它的值是一个不确定的值。

静态局部变量 static 静态局部变量是指在函数体内声明和定义的局部变量, 它仅供本函数使 用,即其他函数不能调用它。 静态局部变量的值在函数调用结束后不消 失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该 变量已有值,就是上一次函数调用结束时的值。 静态局部变量在静态存储区分配存储单元, 在程序的整个运行期间都不 释放。静态局部变量是在编译时赋初值的,即只赋初值一次。

在SDT编译器中,建议对静态局部变量赋初值,否则该静态局部变量的 初值为不确定值。 在其他编译器中,未初始化的静态局部变量的初值可 能为零,这由具体的编译器所决定,使用前最好测试一下。 寄存器变量 register

带 register 修饰符的变量暗示(仅仅是暗示而不是命令)编译程序本 变量将被频繁使用,如果可能的话,应将其保留在

CPU勺寄存器中,以

加快其存取速度。

对于现有的大多数编译程序,最好不要使用 register 修饰符。因为它 是对早期低效的C编译程序的一个很有价值的补充。 随着编译程序技术 的进步,在决定哪些变量应当被存到寄存器中时, 现在的C编译程序能 比程序员做出更好的决定。 全局变量

在函数之外定义的变量称为外部变量, 外部变量是全局变量, 它可以为 本文件中其他函数所共用。全局变量都是静态存储方式,都是在编译时 分配内存,但是作用范围有所不同。 静态外部变量 static

静态外部变量只能在本文件中使用。 所以静态外部变量应该在当前源文 件中声明和定义。

外部变量 extern 定义函数中的全局变量时,其缺省格式是外部变量类型。外部变量应该 在一个头文件中声明,在当前源文件中定义。 外部变量允许其他文件引 用。

下例声明了一个变量和一个结构, 定义了两个变量,其中一个定义带初 始化:

extern int decl1; // this is a declaration struct decl2

{

int member; };

// this just declares the type

- no variable

mentioned int int

def1 = 8;

// this is a definition

def2; // this is a definition

函数

内部函数的声明和定义多在当前源文件中完成; 而外部函数通常在源文 件中定义,在头文件中声明。 内部函数

只在当前源文件中使用的函数应该说明为内部函数。 内部函数应该在当 前源文件中声明和定义。 若内部函数在头文件中声明, 其他源文件通过 包含这个头文件也可使用这个函数, 但这样就失去了其做为内部函数的 意义。

优点:使用内部函数,可以使函数只局限于所在文件。这避免了与其他 源文件中可能出现的同名函数发生冲突。 例:

File : function1.c

#include “ function1.h static int stat_func(void); void MasterFunction(void)

{

rc = stat_func( );

}

static int stat_func(void)

{

return rc;

}

外部函数

对于可在当前源文件以外使用的函数, 应该在一个头文件中声明。 其他 源文件可通过包含这个头文件或进行声明来使用这些函数(推荐用前 者)。

一个良好的编程习惯是在头文件中声明函数的原型。 这可方便编译程序 查错。定义函数时,缺省的函数类型是外部函数。如口: void fun2(void); 和 extern

void fun2(void); 其函数类型是等价的,但前一个是定义函 数,后一个是声明函

数。

小结 编写程序,尤其是大型程序时, 建议采用上文所述的方法对不同的变量、 函数进行必要的声明、 定义。做好这些细节上的事务, 可以为您的编程、 调试、移植等带来很大的方便。 变量

在将变量前, 先解释一下声明和定义这两个概念。 声明一个变量意味着 向编译器描述变量的类型,但并不为变量分配存储空间。定义一个变量 意味着在声明变量的同时还要为变量分配存储空间。 在定义一个变量的 同时还可以对变量进行初始化。

局部变量通常只定义不声明, 而全局变量多在源文件中定义, 在头文件 中声明。

局部变量 在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效。

自动变量 auto

函数中的局部变量, 其缺省格式是自动变量类型。 例如,在函数体中 int b,

c=3; 和 auto int b, c=3; 是等价的。

自动变量是动态分配存储空间的, 函数结束后就释放。 自动变量如不赋 初值,则它的值是一个不确定的值。

静态局部变量 static 静态局部变量是指在函数体内声明和定义的局部变量, 它仅供本函数使 用,即其他函数不能调用它。 静态局部变量的值在函数调用结束后不消 失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该 变量已有值,就是上一次函数调用结束时的值。 静态局部变量在静态存储区分配存储单元, 在程序的整个运行期间都不 释放。静态局部变量是在编译时赋初值的,即只赋初值一次。

在SDT编译器中,建议对静态局部变量赋初值,否则该静态局部变量的 初值为不确定值。 在其他编译器中,未初始化的静态局部变量的初值可 能为零,这由具体的编译器所决定,使用前最好测试一下。 寄存器变量 register

带 register 修饰符的变量暗示(仅仅是暗示而不是命令)编译程序本 变量将被频繁使用,如果可能的话,应将其保留在 加快其存取速度。

对于现有的大多数编译程序,最好不要使用 register 修饰符。因为它 是对早期低效的C编译程序的一个很有价值的补充。 随着编译程序技术 的进步,在决定哪些变量应当被存到寄存器中时, 现在的C编译程序能 比程序员做出更好的决定。

CPU勺寄存器中,以

C语言中变量和函数的声明与定义

变量在将变量前,先解释一下声明和定义这两个概念。声明一个变量意味着向编译器描述变量的类型,但并不为变量分配存储空间。定义一个变量意味着在声明变量的同时还要为变量分配存储空间。在定义一个变量的同时还可以对变量进行初始化。局部变量通常只定义不声明,而全局变量多在源文件中定义,在头文件中声明。局部变量在一个函数的内部定义的变量是内部变量,它只在
推荐度:
点击下载文档文档为doc格式
62e9k226oq7f2vc1v0ey6gjog0oh7b0069j
领取福利

微信扫码领取福利

微信扫码分享