对于嵌入式软件工程师来说,C 语言可以说是最最最主要的编程语言,然而,Linux GNU C 和 ANSI C 这两者之间,却存在着一定的差异,一旦使用不当,很容易造成语法错误。Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。GNU C对标准C进行一系列扩展,以增强标准C的功能。1.零长度和变量长度数组GNU C允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用。例如:struct var_data {
int len;
char data[0];
};
char data[0]仅仅意味着程序中通过var_data结构体实例的data[index]成员可以访问len之后的第index个地址,它并 没有为data[]数组分配内存,因此sizeof(struct var_data)=sizeof(int)。假设struct var_data的数据域就保存在struct var_data紧接着的内存区域中,则通过如下代码可以遍历这些数据:struct var_data s;
...
for (i = 0; i < s.len; i++)
printf("%02x", s.data[i]);
GNU C中也可以使用1个变量定义数组,例如如下代码中定义的“double x[n]”:int main (int argc, char *argv[])
{
int i, n = argc;
double x[n];
for (i = 0; i < n; i++)
x[i] = i;
return 0;
} |