当前位置:嗨网首页>书籍在线阅读

26-旧关键字的新位置

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

12.5.5 旧关键字的新位置

C99允许把类型限定符和存储类别说明符 static 放在函数原型和函数头的形式参数的初始方括号中。对于类型限定符而言,这样做为现有功能提供了一个替代的语法。例如,下面是旧式语法的声明:

void ofmouth(int * const a1, int * restrict a2, int n);    // 以前的风格

该声明表明 a1 是一个指向 intconst 指针,这意味着不能更改指针本身,可以更改指针指向的数据。除此之外,还表明 a2 是一个 restrict 指针,如上一节所述。新的等价语法如下:

void ofmouth(int a1[const], int a2[restrict], int n);    // C99允许

根据新标准,在声明函数形参时,指针表示法和数组表示法都可以使用这两个限定符。

static 的情况不同,因为新标准为 static 引入了一种与以前用法不相关的新用法。现在, static 除了表明静态存储类别变量的作用域或链接外,新的用法告知编译器如何使用形式参数。例如,考虑下面的原型:

double stick(double ar[static 20]);

static 的这种用法表明,函数调用中的实际参数应该是一个指向数组首元素的指针,且该数组至少有20个元素。这种用法的目的是让编译器使用这些信息优化函数的编码。为何给 static 新增一个完全不同的用法?C标准委员会不愿意创建新的关键字,因为这样会让以前用新关键字作为标识符的程序无效。所以,他们会尽量利用现有的关键字,尽量不添加新的关键字。