1. 零长度数组 2. case 语法 3.GNU C 把包含在括号中的复合语句看做是一个表达式,称为语句表达式,它可以出现在任何允许表达式的地方。 4. typeof 关键字 typeof(x)语句可以获得 x 的类型 5.可变参数的宏 标准 C 只支持可变参数的函数,意味着函数的参数是不固定的。 6.标号元素 准 C 要求数组或结构体的初始化值必须以固定的顺序出现,在 GNU C 中,通指定索引或结构体成员名,允许初始化值以任意顺序出现。 7.当前函数名 GNU C 预定义了两个标志符保存当前函数的名字,_ _FUNCTION_ _保存函数在源码中的名字,_ _PRETTY_FUNCTION_ _保存带语言特色的名字。 8.特殊属性声明 GNU C 允许声明函数、变量和类型的特殊属性,以便进行手工的代码优化和定制代码检查的方法。指定一个声明的属性,只需要在声明后添加__attribute__ (( ATTRIBUTE ))。其中 ATTRIBUTE 为属性说明,如果存在多个属性,则以逗号分隔。GNU C 支持 noreturn、format、section、aligned、packed 等十多个属性。 9.内建函数 GNU C 提供了大量的内建函数,其中大部分是标准 C 库函数的 GNU C 编译器内建版本,例如 memcpy()等,它们与对应的标准 C 库函数功能相同。 10 .do { } while(0) 在 Linux 内核中,经常会看到 do{}while(0)这样的语句,许多人开始都会疑惑,认为 do{}while(0)毫无意义,因为它只会执行一次,加不加 do{}while(0)效果是完全一样的,其实 do{}while(0)主要用于宏定义中。