系统编程:C语言与Linux的深度探索
1. GCC扩展与C语言特性
在C语言编程中,GCC提供了一些有用的扩展功能。例如,在switch语句中可以使用区间表示,示例代码如下:
switch (val) { case 1 ... 10: /* ... */ break; case 11 ... 20: /* ... */ break; default: /* ... */ }这种区间表示在处理ASCII字符范围时也非常有用,如case 'A' ... 'Z':。需要注意的是,省略号前后要有空格,否则编译器可能会产生混淆,应该使用case 4 ... 8:而不是case 4...8:。
另外,在GCC中,允许对void类型指针和函数指针进行加减运算。ISO C通常不允许这样做,因为“void”的大小概念不明确,其大小取决于指针实际指向的对象。为了实现这种运算,GCC将引用对象的大小视为一个字节,例如:
a++; /* a is a void pointer */使用-Wpointer-arith选项会使GCC在使用这些扩展时生成警告。
为了让GCC扩展更具可移植性和美观