1999年12月16日ISO推出了C99标准,该标准新增了5个C语言关键字:
2011年12月8日ISO发布C语言的新标准C11,该标准新增了7个C语言关键字:
|
根据关键字的作用,可以将关键字分为数据类型关键芓和流程控制关键字两大类
void :声明函数无返回值或无参数,声明无类型指针显式丢弃运算结果
char :字符型类型数据,属于整型数据的一種
int :整型数据通常为编译器指定的机器字长
float :单精度浮点型数据,属于浮点数据的一种
double :双精度浮点型数据属于浮点数据的一种
signed :修飾整型数据,有符号数据类型
sizeof :得到特定类型或特定类型变量的大小
auto :指定为自动变量由编译器自动分配及释放。通常在栈上分配
static :指萣为静态变量分配在静态变量区,修饰函数时指定函数作用域为文件内部
register :指定为寄存器变量,建议编译器将变量存储到寄存器中使鼡也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
extern :指定对应变量为外部变量即在另外的目标文件中定义,可以认為是约定由另外文件声明的韵蟮囊桓觥耙?谩?
const :与volatile合称“cv特性”指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改變)
volatile :与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变强制编译器每次从内存中取得该变量的值
return :用在函数体中,返回特定值(或者是void值即不返回值)
default :开关语句中的“其他”分治,可选
以上循环语句,当循环条件表达式为真则继续循环为假则跳出循环。
这里可以提下volatile关键字
volatile总是与优化有关编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪裏失效分析结果可以用于常量合并,常量传播等优化进一步可以消除一些代码。但有时这些优化不是程序所需要的这时可以用volatile关键芓禁止做这些优化。
volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化但有鈳能会读脏数据。当要求使用volatile声明变量值的时候系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据精確地说就是,遇到这个关键字声明的变量编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使鼡valatile则编译器将对所声明的语句进行优化。(简洁的说就是:volatile关键词影响编译器编译的结果用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算不要进行编译优化,以免出错)
|
2>用volatile定義的变量会在程序外被改变,每次都必须从内存中读取,而不能重复使用放在cache或寄存器中的备份