C语言中变量和函数的声明与定义
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
局部变量通常只定义不声明, 而全局变量多在源文件中定义, 在头文件 中声明。
局部变量 在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效。
自动变量auto
函数中的局部变量, 其缺省格式是自动变量类型。 例如,在函数体中int b, c=3;和auto int b, c=3;是等价的。
自动变量是动态分配存储空间的, 函数结束后就释放。 பைடு நூலகம்动变量如不赋 初值,则它的值是一个不确定的值。
在SDT编译器中,建议对静态局部变量赋初值,否则该静态局部变量的 初值为不确定值。 在其他编译器中,未初始化的静态局部变量的初值可 能为零,这由具体的编译器所决定,使用前最好测试一下。
寄存器变量register
带register修饰符的变量暗示(仅仅是暗示而不是命令)编译程序本
变量将被频繁使用,如果可能的话,应将其保留在CPU勺寄存器中,以
小结 编写程序,尤其是大型程序时, 建议采用上文所述的方法对不同的变量、 函数进行必要的声明、 定义。做好这些细节上的事务, 可以为您的编程、 调试、移植等带来很大的方便。
变量
在将变量前, 先解释一下声明和定义这两个概念。 声明一个变量意味着 向编译器描述变量的类型,但并不为变量分配存储空间。定义一个变量 意味着在声明变量的同时还要为变量分配存储空间。 在定义一个变量的 同时还可以对变量进行初始化。
静态局部变量static静态局部变量是指在函数体内声明和定义的局部变量, 它仅供本函数使 用,即其他函数不能调用它。 静态局部变量的值在函数调用结束后不消 失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该 变量已有值,就是上一次函数调用结束时的值。 静态局部变量在静态存储区分配存储单元, 在程序的整个运行期间都不 释放。静态局部变量是在编译时赋初值的,即只赋初值一次。
优点:使用内部函数,可以使函数只局限于所在文件。这避免了与其他 源文件中可能出现的同名函数发生冲突。
例:
File:function1.c
#include“function1.h static int stat_func(void);
void MasterFunction(void)
{
rc=stat_func();
静态局部变量static静态局部变量是指在函数体内声明和定义的局部变量, 它仅供本函数使 用,即其他函数不能调用它。 静态局部变量的值在函数调用结束后不消 失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该 变量已有值,就是上一次函数调用结束时的值。 静态局部变量在静态存储区分配存储单元, 在程序的整个运行期间都不 释放。静态局部变量是在编译时赋初值的,即只赋初值一次。
}
static int stat_func(void)
{
return rc;
}
外部函数
对于可在当前源文件以外使用的函数, 应该在一个头文件中声明。 其他 源文件可通过包含这个头文件或进行声明来使用这些函数(推荐用前 者)。
一个良好的编程习惯是在头文件中声明函数的原型。 这可方便编译程序 查错。定义函数时,缺省的函数类型是外部函数。如口:void fun2(void);和extern void fun2(void);其函数类型是等价的,但前一个是定义函 数,后一个是声明函数。
始化:
extern int decl1;//this is a declaration
struct decl2
{
int member;
};//this just declares the type-no variable
mentioned
intdef1 = 8;// this is a definition
变量 在将变量前, 先解释一下声明和定义这两个概念。 声明一个变量意味着 向编译器描述变量的类型,但并不为变量分配存储空间。定义一个变量 意味着在声明变量的同时还要为变量分配存储空间。 在定义一个变量的 同时还可以对变量进行初始化。
局部变量通常只定义不声明, 而全局变量多在源文件中定义, 在头文件 中声明。
intdef2; // this is a definition
函数
内部函数的声明和定义多在当前源文件中完成; 而外部函数通常在源文 件中定义,在头文件中声明。
内部函数
只在当前源文件中使用的函数应该说明为内部函数。 内部函数应该在当 前源文件中声明和定义。 若内部函数在头文件中声明, 其他源文件通过 包含这个头文件也可使用这个函数, 但这样就失去了其做为内部函数的 意义。
局部变量 在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效。
自动变量auto
函数中的局部变量, 其缺省格式是自动变量类型。 例如,在函数体中int b, c=3;和auto int b, c=3;是等价的。
自动变量是动态分配存储空间的, 函数结束后就释放。 自动变量如不赋 初值,则它的值是一个不确定的值。
加快其存取速度。
对于现有的大多数编译程序,最好不要使用register修饰符。因为它
是对早期低效的C编译程序的一个很有价值的补充。 随着编译程序技术 的进步,在决定哪些变量应当被存到寄存器中时, 现在的C编译程序能 比程序员做出更好的决定。
全局变量
在函数之外定义的变量称为外部变量, 外部变量是全局变量, 它可以为 本文件中其他函数所共用。全局变量都是静态存储方式,都是在编译时 分配内存,但是作用范围有所不同。
在SDT编译器中,建议对静态局部变量赋初值,否则该静态局部变量的 初值为不确定值。 在其他编译器中,未初始化的静态局部变量的初值可 能为零,这由具体的编译器所决定,使用前最好测试一下。
寄存器变量register
带register修饰符的变量暗示(仅仅是暗示而不是命令)编译程序本
静态外部变量static
静态外部变量只能在本文件中使用。 所以静态外部变量应该在当前源文 件中声明和定义。
外部变量extern定义函数中的全局变量时,其缺省格式是外部变量类型。外部变量应该 在一个头文件中声明,在当前源文件中定义。 外部变量允许其他文件引 用。
下例声明了一个变量和一个结构, 定义了两个变量,其中一个定义带初
局部变量 在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效。
自动变量auto
函数中的局部变量, 其缺省格式是自动变量类型。 例如,在函数体中int b, c=3;和auto int b, c=3;是等价的。
自动变量是动态分配存储空间的, 函数结束后就释放。 பைடு நூலகம்动变量如不赋 初值,则它的值是一个不确定的值。
在SDT编译器中,建议对静态局部变量赋初值,否则该静态局部变量的 初值为不确定值。 在其他编译器中,未初始化的静态局部变量的初值可 能为零,这由具体的编译器所决定,使用前最好测试一下。
寄存器变量register
带register修饰符的变量暗示(仅仅是暗示而不是命令)编译程序本
变量将被频繁使用,如果可能的话,应将其保留在CPU勺寄存器中,以
小结 编写程序,尤其是大型程序时, 建议采用上文所述的方法对不同的变量、 函数进行必要的声明、 定义。做好这些细节上的事务, 可以为您的编程、 调试、移植等带来很大的方便。
变量
在将变量前, 先解释一下声明和定义这两个概念。 声明一个变量意味着 向编译器描述变量的类型,但并不为变量分配存储空间。定义一个变量 意味着在声明变量的同时还要为变量分配存储空间。 在定义一个变量的 同时还可以对变量进行初始化。
静态局部变量static静态局部变量是指在函数体内声明和定义的局部变量, 它仅供本函数使 用,即其他函数不能调用它。 静态局部变量的值在函数调用结束后不消 失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该 变量已有值,就是上一次函数调用结束时的值。 静态局部变量在静态存储区分配存储单元, 在程序的整个运行期间都不 释放。静态局部变量是在编译时赋初值的,即只赋初值一次。
优点:使用内部函数,可以使函数只局限于所在文件。这避免了与其他 源文件中可能出现的同名函数发生冲突。
例:
File:function1.c
#include“function1.h static int stat_func(void);
void MasterFunction(void)
{
rc=stat_func();
静态局部变量static静态局部变量是指在函数体内声明和定义的局部变量, 它仅供本函数使 用,即其他函数不能调用它。 静态局部变量的值在函数调用结束后不消 失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该 变量已有值,就是上一次函数调用结束时的值。 静态局部变量在静态存储区分配存储单元, 在程序的整个运行期间都不 释放。静态局部变量是在编译时赋初值的,即只赋初值一次。
}
static int stat_func(void)
{
return rc;
}
外部函数
对于可在当前源文件以外使用的函数, 应该在一个头文件中声明。 其他 源文件可通过包含这个头文件或进行声明来使用这些函数(推荐用前 者)。
一个良好的编程习惯是在头文件中声明函数的原型。 这可方便编译程序 查错。定义函数时,缺省的函数类型是外部函数。如口:void fun2(void);和extern void fun2(void);其函数类型是等价的,但前一个是定义函 数,后一个是声明函数。
始化:
extern int decl1;//this is a declaration
struct decl2
{
int member;
};//this just declares the type-no variable
mentioned
intdef1 = 8;// this is a definition
变量 在将变量前, 先解释一下声明和定义这两个概念。 声明一个变量意味着 向编译器描述变量的类型,但并不为变量分配存储空间。定义一个变量 意味着在声明变量的同时还要为变量分配存储空间。 在定义一个变量的 同时还可以对变量进行初始化。
局部变量通常只定义不声明, 而全局变量多在源文件中定义, 在头文件 中声明。
intdef2; // this is a definition
函数
内部函数的声明和定义多在当前源文件中完成; 而外部函数通常在源文 件中定义,在头文件中声明。
内部函数
只在当前源文件中使用的函数应该说明为内部函数。 内部函数应该在当 前源文件中声明和定义。 若内部函数在头文件中声明, 其他源文件通过 包含这个头文件也可使用这个函数, 但这样就失去了其做为内部函数的 意义。
局部变量 在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效。
自动变量auto
函数中的局部变量, 其缺省格式是自动变量类型。 例如,在函数体中int b, c=3;和auto int b, c=3;是等价的。
自动变量是动态分配存储空间的, 函数结束后就释放。 自动变量如不赋 初值,则它的值是一个不确定的值。
加快其存取速度。
对于现有的大多数编译程序,最好不要使用register修饰符。因为它
是对早期低效的C编译程序的一个很有价值的补充。 随着编译程序技术 的进步,在决定哪些变量应当被存到寄存器中时, 现在的C编译程序能 比程序员做出更好的决定。
全局变量
在函数之外定义的变量称为外部变量, 外部变量是全局变量, 它可以为 本文件中其他函数所共用。全局变量都是静态存储方式,都是在编译时 分配内存,但是作用范围有所不同。
在SDT编译器中,建议对静态局部变量赋初值,否则该静态局部变量的 初值为不确定值。 在其他编译器中,未初始化的静态局部变量的初值可 能为零,这由具体的编译器所决定,使用前最好测试一下。
寄存器变量register
带register修饰符的变量暗示(仅仅是暗示而不是命令)编译程序本
静态外部变量static
静态外部变量只能在本文件中使用。 所以静态外部变量应该在当前源文 件中声明和定义。
外部变量extern定义函数中的全局变量时,其缺省格式是外部变量类型。外部变量应该 在一个头文件中声明,在当前源文件中定义。 外部变量允许其他文件引 用。
下例声明了一个变量和一个结构, 定义了两个变量,其中一个定义带初