在看Linux内核相关的时候经常看到像这样子的结构体赋值:
struct fileOperation fops = {
.read = read,
.open = open,
};
这个语法好奇怪,在其他C程序中都没有见到过,是C的语法还是Linux的宏?
struct fileOperation fops = {
.read = read,
.open = open,
};
这个语法好奇怪,在其他C程序中都没有见到过,是C的语法还是Linux的宏?
|
sNullpJan 20, 2013
1
是gcc特有的语法应该。
|
|
2
|
|
3
@gDD
原来是C99语法,不过这种写法是应该避免还是应该使用? |
|
gDDJan 20, 2013
4
@Sherlockhlt 说不好,我不是搞C的,既然你说Linux内核都在用,没有理由不用啊,看着多清晰。
|
|
sinxcccJan 20, 2013
5
@Sherlockhlt 归根结底还是一句套话:视项目视团队而定。
|
|
liuwJan 20, 2013
6
这么好的东西为什么不用?
|
|
ForgotFunJan 20, 2013
7
这是GCC的扩展。是内核中常用的赋值方法。
|
|
ForgotFunJan 20, 2013
8
#include <stdio.h>
#include <string.h> void main (int argc, char **argv) { int size = atoi(argv[1]); char buffer[size]; printf("sizeof buffer %d\n", sizeof(buffer)); } 在GCC中这程序也是合法。 |
|
10
@liuw
主要是怕兼容性不好 |
|
sivacohanJan 20, 2013 via Android
13
没看明白重点。。。
有时候我也这么写啊。 |
|
kneepJan 20, 2013 via iPhone
14
这是GNU C的扩展Linux里面大量存在
|
|
dndxJan 20, 2013
16
@fangzhzh
@ForgotFun 这跟 GCC 有什么关系,VLA 是 C99 标准定义的。 https://en.wikipedia.org/wiki/Variable-length_array |
|
sswordJan 20, 2013
19
C99的语法
|
|
liuwJan 20, 2013
20
|
|
faywongJan 21, 2013
22
Linux代码的很多特性都必须由gcc来支持,并且gcc在支持c语言最新标准上最及时。所以建议在Linux平台尽情使用。若是跨平台的项目/兼容过去的陈旧代码,请尽量不要使用。
|