GNU C是Linux上标准的编译器,它建立在自由软件基金会的编程许可证(GPL)的基础上,GNU C对标准C(ACSI C)进行了一系列的扩展,以增强标准C的功能。
主要有一下一些增强特性:
- 零长数组和编程数组
GNU C允许使用0长数组,例如下面定义的结构体array,若定义时指定其数组成员data的长度为0,则代表该数组为0长数组,那么在运行时可以使用array结构体的实例访问len之后的地址
struct array{
int len;
char data[0];
}
struct array arr;
for(..) {
c = arr.data[i]
}
CNU C也允许定义变长数组,例如定义 int n = 10; char a[n];
- Switch
如下的switch语法是GNU C编译器允许的:
switch(c) {
case 1...5: break;
case 6...10:break;
case 11...20:break;
}
- 可变参宏
ASCII C支持可变参函数,GNU C扩展了ASCII C的这可变参特征,在GNU C中宏也可以接受可变参,例如:
#define pr_debug(const char *format, arg...) printk(format, ##arg)