C 语 言 中
32
个关键字详
由ANSI标准定义的C语言关键字共32个: autodoubleintstructbreakelselongswitch caseenumregistertypedefcharexternreturnunion constfloatshortunsignedcontinueforsignedvoid defaultgotosizeofvolatiledoifwhilestatic 根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。
1 数据类型关键字
A 基本数据类型( 5 个)
void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
char :字符型类型数据,属于整型数据的一种
int :整型数据,通常为编译器指定的机器字长
float :单精度浮点型数据,属于浮点数据的一种
double :双精度浮点型数据,属于浮点数据的一种
B 类型修饰关键字( 4 个)
short :修饰 int ,短整型数据,可省略被修饰的 int long :修饰 int ,长整形数据,可省略被修饰的 int signed :修饰整型数据,有符号数据类型 unsigned :修饰整型数据,无符号数据类型
C复杂类型关键字(5个)
struct :结构体声明
union :共用体声明
enum枚举声明
typedef :声明类型别名
sizeof :得到特定类型或特定类型变量的大小
D 存储级别关键字( 6 个)
auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配
static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部 register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数 形参,建议编译器通过寄存器而不是堆栈传递参数
extern :指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外 文件声明的韵蟮囊桓觥耙谩
con st :与volatile 合称“ cv特性”,指定变量不可被当前线程/进程改变(但有可能被系 统或其他线程 / 进程改变)
volatile :与 const 合称“ cv 特性”,指定变量的值有可能会被系统或其他进程 /线程改 变,强制编译器每次从内存中取得该变量的值
2 流程控制关键字
A 跳转结构( 4 个)
return :用在函数体中,返回特定值(或者是 void 值,即不返回值) continue :结束当前循环,开始下一轮循环
break :跳出当前循环或switch结构
goto :无条件跳转语句
B 分支结构( 5 个)
if :条件语句
else :条件语句否定分支(与 if 连用) switch :开关语句(多重分支语句)
case :开关语句中的分支标记
default :开关语句中的“其他”分治,可选
C循环结构(3个)
for : for 循环结构, for(1;2;3)4; 的执行顺序为 1->2->4->3->2... 循环,其中 2 为循环条 件
do: do 循环结构, do1while(2); 的执行顺序是 1->2->1... 循环, 2 为循环条件
while : while 循环结构, while(1)2; 的执行顺序是 1->2->1... 循环, 1 为循环条件 以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。
C99和C89标准对比多了些什么
1、restrict :指针类型修饰符
C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途
径,因此只有借助 restrict 指针表达式才能访问对象。 restrict 指针指针主要用做函数变 元,或者指向由 malloc() 函数所分配的内存变量。 restrict 数据类型不改变程序的语义。
如果某个函数定义了两个 restrict 指针变元,编译程序就假定它们指向两个不同的对 象,memcpy()函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如
下:
代码:
void*memcpy(void*s1,constvoid*s2,size_tsize);
如果si和s2所指向的对象重叠,其操作就是未定义的。memcpy()函数只能用于不重叠
的对象。C99中memcpy()函数原型如下: 代码:
void*memcpy(void*restricts1,constvoid*restricts2,size_tsize);
通过使用 restrict 修饰 s1 和 s2 变元,可确保它们在该原型中指向不同的对象。
2、inline (内联)关键字
内联函数除了保持结构化和函数式