c语言关键字的用法详解

合集下载

c语言关键字的用法详解

c语言关键字的用法详解

1. Static用法1.1 static声明的变量在C语言中有两方面的特征:1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。

这一点是它与堆栈变量和堆变量的区别。

2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。

这一点是它与全局变量的区别。

1.2 特点A。

若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;B。

若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;D。

如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static 的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

函数前加static使得函数成为静态函数。

但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数).使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义.最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同).1.3 关键字static的作用是什么?这个简单的问题很少有人能回答完全。

在C语言中,关键字static有三个明显的作用:1.3.1 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

c语言存储关键字auto,static,register之详解

c语言存储关键字auto,static,register之详解

c语言存储关键字auto/static/register之详解朱有鹏1、存储类相关的关键字11.1、auto(1)auto关键字在C语言中只有一个作用,那就是修饰局部变量。

(2)auto修饰局部变量,表示这个局部变量是自动局部变量,自动局部变量分配在栈上。

(既然在栈上,说明它如果不初始化那么值就是随机的······)(3)平时定义局部变量时就是定义的auto的,只是省略了auto关键字而已。

可见,auto的局部变量其实就是默认定义的普通的局部变量。

#include<stdio.h>auto var1=20;//错误int main(){auto int var2=15;//等价于int var2=15;printf("var%d\n",var);return0;}1.2、static关键字(1)static关键字在C语言中有两种用法,这两种用法之间没有任何关联,是完全是独立的。

也许当年本应该多发明一个关键字,但是C语言的作者觉得关键字太多不好,于是给static增加了一种新用法,导致static一个关键字竟然有两种截然不同的含义。

(2)static的第一种用法:用来修饰局部变量,形成静态局部变量。

(3)static的第二种用法:用来修饰全局变量,形成静态全局变量。

本节重点分析第一种用法,因为第二种用法涉及到链接域的问题在7.7节才涉及。

静态局部变量和自动局部变量(auto)的区别。

本质区别是存储类不同,自动局部变量分配在栈上,而静态局部变量分配在data或者bss段上。

静态的局部变量和全局变量的相似处:1、静态局部变量在存储类方面(数据段)和全局变量一样。

2、静态局部变量在生命周期方面,和全局变量一样。

静态局部变量和全局变量的区别是作用域、链接属性不同。

静态局部变量作用域是代码块作用域(和自动局部变量是一样的)、链接属性是无连接(后面会详细讲);全局变量作用域是文件作用域(和函数是一样的)、链接属性方面是外连接(后面会详细讲到)。

c语言中extern的详细用法解析

c语言中extern的详细用法解析

一、extern关键字的概述在C语言中,extern是一个关键字,它用来引用外部变量或者函数。

extern关键字告诉编译器,所描述的变量或函数是在其他地方定义的,并且要在当前文件中使用。

extern关键字可以用于在文件之间共享变量,也可以用于访问全局变量。

二、extern关键字的用法1. 引用外部全局变量在C语言中,如果想要在一个文件中引用其他文件中定义的全局变量,可以使用extern关键字。

例如:```cextern int global_var;```这样就可以在当前文件中使用其他文件中定义的global_var变量。

2. 外部函数的声明在C语言中,如果想要在一个文件中引用其他文件中定义的函数,可以使用extern关键字进行声明。

例如:```cextern void function_name();```这样就可以在当前文件中使用其他文件中定义的function_name函数。

3. 使用extern关键字的注意事项在使用extern关键字时,需要注意以下几点:- 在声明变量或函数时,不要给出变量或函数的具体实现,只需声明其存在即可。

- 声明时的数据类型、函数参数列表要和实际实现一致,以确保在信息时能够正确匹配。

- 只能在全局作用域和函数的外部使用extern关键字。

在函数内部使用extern是无效的。

三、extern关键字的示例下面通过一个示例来展示extern关键字的用法:```c// file1.c#include <stdio.h>int global_var = 10;void function_name();int m本人n() {printf("The value of global_var is: d\n", global_var);function_name();return 0;}``````c// file2.c#include <stdio.h>extern int global_var; // 声明外部全局变量void function_name() {printf("This is an external function\n");printf("The value of global_var is: d\n", global_var);}```在这个例子中,file1.c文件中定义了一个全局变量global_var和一个m本人n函数,而file2.c文件中使用extern关键字声明了global_var和function_name函数。

C语言中typedef用法

C语言中typedef用法
如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法?
使用 typedefs 为现有类型创建同义字。
定义易于记忆的类型名
typedef 使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,位于 &#39;&#39;typedef&#39;&#39; 关键字右边。例如:
C语言中typedef用法
1. 基本解释
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
typedef void (*pFunParam)();
//整体声明一个新类型
typedef void (*pFun)(pF
unParam);
//使用定义的新类型来声明对象,等价于void (*b[10]) (void (*)());
size len = file.getlength();
std::vector &lt;size&gt; vs;
typedef 还可以掩饰符合类型,如指针和数组。例如,你不用象下面这样重复定义有 81 个字符元素的数组:
char line[81];
char text[81];
定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样:
根据我们上面的阐述可以知道:新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode。
解决这个问题的方法有多种:

C语言常用关键字

C语言常用关键字
extern 意为“外来的”···它的作用在于告诉编译器:有这个变量,它可能不存在当前的文件中,但它肯定要存在于工程中的某一个源文件中或者一个Dll的输出中。
(4)const
被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
它可以修饰函数的参数、返回值,甚至函数的定义体。 -----------------------
a.对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。
例如将void Func(A a) 改为void Func(const A &a)。
b.对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。
否则既达不到提高效率的目的,又降低了函数的可理解性。
例如void Func(int x) 不应该改为void Func(const int &x)。
简单示例:
DWORD __stdcall threadFunc(LPVOID signal)
{
int* intSignal=reinterpret_cast(signal);
*intSignal=2;
while(*intSignal!=1)
(1)auto
这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。
(2)register
这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。
如下语句将出现编译错误:
char *str = GetString();//cannot convert from 'const char *' to 'char *';

C语言32关键字详解

C语言32关键字详解

32关键字第一个关键字:auto用来声明自动变量。

可以显式的声明变量为自动变量。

只要不是声明在所有函数之前的变量,即使没加auto关键字,也默认为自动变量。

并且只在声明它的函数内有效。

而且当使用完毕后,它的值会自动还原为最初所赋的值。

自动变量使用时要先赋值,因为其中包含的是未知的值。

例:auto int name=1;第二个关键字:static用来声明静态变量。

可以显式的声明变量为静态变量。

也为局部变量。

只在声明它的函数内有效。

它的生命周期从程序开始起一直到程序结束。

而且即使使用完毕后,它的值仍旧不还原。

即使没有给静态变量赋值,它也会自动初始化为.例:static int name=1.第三个关键字:extern用来声明全局变量。

同时声明在main函数之前的变量也叫全局变量。

它可以在程序的任何地方使用。

程序运行期间它是一直存在的。

全局变量也会初始化为.例:extern int name;第四个关键字:register用来声明为寄存器变量。

也为局部变量,只在声明它的函数内有效。

它是保存在寄存器之中的。

速度要快很多。

对于需要频繁使用的变量使用它来声明会提高程序运行速度。

例:register int name=1;第五个关键字:int用来声明变量的类型。

int为整型。

注意在位和位系统中它的范围是不同的。

位中占用个字节。

位中占用个字节。

还可以显式的声明为无符号或有符号:unsigned int signed int .有符号和无符号的区别就是把符号位也当作数字位来存储。

也可用short和long来声明为短整型,或长整行。

例:int num;第六个关键字:float用来声明变量的类型。

float为浮点型,也叫实型。

它的范围固定为个字节。

其中位为小数位。

其他为整数位。

例:float name;第七个关键字:double用来声明为双精度类型。

它的范围为个字节。

位为小数位。

也可使用更高精度的long double 它的范围则更大,达到字节。

32个关键字在c语言中的含义和作用

在C语言中,有很多关键字是程序员需要熟悉和理解的,这些关键字在编写C语言程序时扮演着至关重要的角色。

本文将深度探讨其中32个关键字在C语言中的含义和作用,帮助读者更深入地理解这些关键字的用法和功能。

1. int在C语言中,int是一种数据类型,用来声明整数类型的变量。

它可以存储整数值,范围通常是-xxx到xxx。

2. floatfloat是C语言中的另一种数据类型,用来声明单精度浮点数变量。

它可以存储小数值,通常范围是1.2E-38到3.4E+38。

3. charchar是C语言中的字符类型,用来声明一个字符变量。

它通常用来存储ASCII码中的字符。

4. doubledouble是C语言中的双精度浮点数类型,用来声明双精度浮点数变量。

它可以存储更大范围的小数值,通常范围是2.3E-308到1.7E+308。

5. ifif是C语言中的条件语句,用来根据指定条件执行不同的代码块。

它对程序的流程进行控制,根据条件的真假来决定执行哪一部分代码。

6. elseelse是if语句的补充,用来在条件不满足时执行另一段代码。

它可以用于if语句的后续逻辑判断。

7. whilewhile是C语言中的循环语句,用来重复执行一段代码块,直到指定的条件不再满足为止。

它可以用于处理需要重复执行的任务。

8. forfor是另一种循环语句,通常用于已知循环次数的情况下重复执行一段代码块。

它的结构更加简洁和清晰。

9. dodo-while是C语言中的另一种循环语句,与while的区别在于它先执行一次循环体,再进行条件判断。

它保证循环体至少会执行一次。

10. switchswitch是C语言中的多路分支语句,通过不同的case标签来选择不同的执行路径。

它对多个条件进行判断,并执行相应的代码块。

11. casecase是switch语句中的分支标签,用来指定需要执行的代码块。

它是switch语句的重要组成部分。

12. breakbreak是C语言中的控制语句,用来跳出当前循环或switch语句。

c语言关键字及其含义用法

c语言关键字及其含义用法C语言关键字及其含义和用法C语言作为一种通用的高级编程语言,具有广泛的应用领域和较高的执行效率。

C语言的灵活性和强大性使得它成为编程界广泛使用的语言之一。

而在C语言中,关键字是指被预先定义并具有特定用途的标识符。

本文将对C语言的关键字进行逐一介绍,并详细解释其含义和用法。

1. auto:auto是一个存储类别关键字,用于定义在函数内部的局部变量,默认情况下,所有在函数内定义的变量都是自动变量。

例如:cvoid func(){auto int num = 10;}2. break:break用于终止当前循环或者switch语句,并跳出该循环或者switch语句的执行体。

例如:cfor(int i=0; i<10; i++){if(i == 5){break;}printf("d\n", i);}3. case:case用于在switch语句中定义每个具体的匹配条件。

例如:cint num = 1;switch(num){case 1:printf("The number is 1.\n");break;case 2:printf("The number is 2.\n");break;default:printf("The number is not 1 or 2.\n");}4. char:char是一种基本数据类型,用于定义字符类型的变量或者函数参数。

例如:cchar ch = 'A';char str[] = "Hello World";5. const:const是一个类型限定符,用于定义常量,一旦定义后,其值就不能被修改。

例如:cconst int num = 10;6. continue:continue用于终止当前循环的剩余代码,并立即开始下一轮循环。

32个关键字在c语言中的含义和作用

32个关键字在c语言中的含义和作用【32个关键字在c语言中的含义和作用解析】在C语言中,有一些关键字是非常重要的,它们在程序中扮演着至关重要的角色。

下面,我将对这32个关键字进行深入解析,让我们来一探究竟。

1. #include在C语言中,#include用于包含头文件,使得在当前文件中可以使用所包含文件中的定义。

2. intint是C语言中的一个基本数据类型,代表整数。

3. charchar也是C语言中的一个基本数据类型,代表字符。

4. floatfloat是C语言中的一个基本数据类型,代表单精度浮点数。

5. doubledouble是C语言中的一个基本数据类型,代表双精度浮点数。

6. ifif是C语言中的条件语句,用于进行条件判断。

7. elseelse也是C语言中的条件语句,用于在条件不成立时执行的语句块。

8. switchswitch语句用于多条件判断,可以替代多个if-else语句。

9. case在switch语句中,case用于列举不同的条件分支。

10. default在switch语句中,default用于表示默认的条件分支。

11. forfor循环用于重复执行一个语句块。

12. whilewhile循环也用于重复执行一个语句块,但条件判断在循环之前进行。

13. dodo-while循环会先执行一次循环体,然后再进行条件判断。

14. breakbreak语句用于跳出循环。

15. continuecontinue语句用于结束当前循环,并开始下一次循环。

16. returnreturn语句用于结束函数的执行,并返回一个值。

17. voidvoid用于声明函数的返回类型,表示该函数没有返回值。

18. sizeofsizeof用于获取变量或类型的长度。

19. typedeftypedef用于给数据类型取一个新的名字。

20. structstruct用于定义结构体类型。

21. unionunion也用于定义数据类型,但它和结构体不同,它的所有成员共用一块内存。

c语言32个关键字详解

c语言32个关键字详解C语言是一种广泛使用的编程语言,它的设计初衷是为了实现操作系统和系统软件。

C语言具有高效、可移植和可扩展性等特点,在计算机领域中拥有广泛的应用。

C语言中有32个关键字,它们是语言中的特定单词,具有特殊含义,可以用于定义变量、控制程序流程、操作内存等。

本文将详细介绍C语言的32个关键字,并讨论它们的用法和作用。

1. autoauto是C语言的一个关键字,用于定义局部变量。

在函数内部定义的变量默认为auto类型,它的生命周期与函数的生命周期相同。

auto关键字可以省略,编译器会自动识别变量类型。

2. breakbreak是C语言中的一个关键字,用于跳出循环语句。

当执行到break语句时,程序会立即跳出当前循环,并执行下一条语句。

3. casecase是C语言中的一个关键字,用于在switch语句中定义分支条件。

case语句后面跟着一个常量表达式,当switch语句的表达式与case语句的常量表达式匹配时,程序会执行该分支语句。

4. charchar是C语言中的一个关键字,用于定义字符类型变量。

char 类型的变量通常用于存储单个字符,它占用一个字节的内存空间。

5. constconst是C语言中的一个关键字,用于定义常量。

const关键字可以用于修饰变量、函数参数和函数返回值,表示它们的值是不可修改的。

6. continuecontinue是C语言中的一个关键字,用于跳过当前循环的剩余语句,执行下一次循环。

当执行到continue语句时,程序会跳过当前循环的剩余语句,并开始下一次循环。

7. defaultdefault是C语言中的一个关键字,用于定义switch语句的默认分支。

当switch语句的表达式与所有case语句的常量表达式都不匹配时,程序会执行default分支语句。

8. dodo是C语言中的一个关键字,用于定义do-while循环语句。

do-while循环语句先执行一次循环体,然后判断循环条件是否成立,如果成立则继续执行循环体,否则退出循环。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. Static用法1.1 static声明的变量在C语言中有两方面的特征:1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。

这一点是它与堆栈变量和堆变量的区别。

2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。

这一点是它与全局变量的区别。

1.2 特点A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static 的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

函数前加static使得函数成为静态函数。

但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。

使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。

随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。

为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。

最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。

1.3 关键字static的作用是什么?这个简单的问题很少有人能回答完全。

在C语言中,关键字static有三个明显的作用:1.3.1 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

int testStatic(){int x=1;x++;return x;}main(){int i;for(i=0;i<5;i++)printf("%d\n",testStatic());getch();}==》2 2 2 2 2int testStatic(){static int x=1;x++;return x;}main(){int i;for(i=0;i<5;i++)printf("%d\n",testStatic());getch();}==》2 3 4 5 61.3.2 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。

它是一个本地的全局变量。

1.3.3 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。

那就是,这个函数被限制在声明它的模块的本地范围内使用。

static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明1.3.4 局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, register( <C语言程序设计(第二版)> 谭浩强, 第174-175页)与auto类型(普通)局部变量相比, static局部变量有三点不同1.3.4.1 存储空间分配不同auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储区, 在程序整个运行期间都不释放. 两者之间的作用域相同, 但生存期不同.1.3.4.2 static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次3.对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符, 而auto类型的初值是不确定的. (对于C++中的class对象例外, class的对象实例如果不初始化, 则会自动调用默认构造函数, 不管是否是static类型)特点: static局部变量的”记忆性”与生存期的”全局性”所谓”记忆性”是指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的值.示例程序一#include <iostream>using namespace std;void staticLocalVar(){static int a = 0; // 运行期时初始化一次, 下次再调用时, 不进行初始化工作cout < < "a= " < <a < <endl;++a;}int main(){staticLocalVar(); // 第一次调用, 输出a=0staticLocalVar(); // 第二次调用, 记忆了第一次退出时的值, 输出a=1return 0;}1.4 应用:1.4.1 利用”记忆性”,记录函数调用的次数(示例程序一)1.4.2 利用生存期的”全局性”改善”return a pointer / reference to a local object”的问题. Local object的问题在于退出函数, 生存期即结束,. 利用static的作用, 延长变量的生存期.示例程序二:// IP address to string format// Used in Ethernet Frame and IP Header analysisconst char * IpToStr(UINT32 IpAddr){static char strBuff[16]; // static局部变量, 用于返回地址有效const unsigned char *pChIP = (const unsigned char *)&IpAddr;sprintf(strBuff, "%u.%u.%u.%u ", pChIP[0], pChIP[1], pChIP[2], pChIP[3]);return strBuff;}注意事项:1. “记忆性”, 程序运行很重要的一点就是可重复性, 而static变量的”记忆性”破坏了这种可重复性, 造成不同时刻至运行的结果可能不同.2. “生存期”全局性和唯一性. 普通的local变量的存储空间分配在stack上, 因此每次调用函数时, 分配的空间都可能不一样, 而static具有全局唯一性的特点, 每次调用时, 都指向同一块内存, 这就造成一个很重要的问题---- 不可重入性!!!这样在多线程程序设计或递归程序设计中, 要特别注意这个问题.(不可重入性的例子可以参见<effective C++ (2nd)> (影印版)第103-105页)下面针对示例程序二, 分析在多线程情况下的不安全性.(为方便描述, 标上行号)①const char * IpToStr(UINT32 IpAddr)②{③static char strBuff[16]; // static局部变量, 用于返回地址有效④const unsigned char *pChIP = (const unsigned char *)&IpAddr;⑤sprintf(strBuff, "%u.%u.%u.%u ", pChIP[0], pChIP[1], pChIP[2], pChIP[3]);⑥return strBuff;⑦}假设现在有两个线程A,B运行期间都需要调用IpToStr()函数, 将32位的IP地址转换成点分10进制的字符串形式. 现A先获得执行机会, 执行IpToStr(), 传入的参数是0x0B090A0A, 顺序执行完应该返回的指针存储区内容是:”10.10.9.11”, 现执行到⑥时, 失去执行权, 调度到B线程执行, B线程传入的参数是0xA8A8A8C0, 执行至⑦, 静态存储区的内容是192.168.168.168. 当再调度到A执行时, 从⑥继续执行, 由于strBuff的全局唯一性, 内容已经被B线程冲掉, 此时返回的将是192.168.168.168字符串, 不再是10.10.9.11字符串.二、外部静态变量/函数在C中static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。

, 但为了限制全局变量/函数的作用域, 函数或变量前加static使得函数成为静态函数。

但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。

注意此时, 对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区, 生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部.使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

示例程序三://file1.cppstatic int varA;int varB;extern void funA(){……}static void funB(){……}//file2.cppextern int varB; // 使用file1.cpp中定义的全局变量extern int varA; // 错误! varA是static类型, 无法在其他文件中使用extern vod funA(); // 使用file1.cpp中定义的函数extern void funB(); // 错误! 无法使用file1.cpp文件中static函数2. extern用法外部函数:(1)在定义函数时,如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其它文件调用。

如函数首部可以写为extern int fun (int a,int b)这样,函数fun就可以为其它文件调用。

C语言规定,如果在定义函数时省略extern,则隐含为外部函数。

(2)在需要调用此函数的文件中,用extern声明所用的函数是外部函数。

相关文档
最新文档