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