系统编程相关知识与技巧总结
1. 代码规范与GCC扩展
在代码编写中,有一些细节需要注意。例如在使用省略号时,省略号前后应该有空格,否则编译器可能会产生混淆,尤其是在处理整数范围时。正确的写法如case 4 ... 8:,而不是case 4...8:。
在GCC中,允许对void类型的指针和函数指针进行加减运算。但通常ISO C不允许对这类指针进行算术运算,因为 “void” 的大小概念不明确,它取决于指针实际指向的对象。为了实现这种算术运算,GCC将引用对象的大小视为一个字节。示例代码如下:
a++; /* a is a void pointer */使用-Wpointer-arith选项会使GCC在使用这些扩展时生成警告。
另外,__attribute__语法不够美观。通过一些预处理技巧,可以让代码更美观且使GCC扩展具有可移植性。可以将以下代码片段放在头文件中,并在源文件中包含该头文件:
#if __GNUC__ >= 3 # undef inline # define inline inline __attribute__ ((always_inline)) # define __noinline __attribute__ ((noinline)) # define __pur