代码从Android AOSP代码中窃取 ,Sensor.cpp有以下代码。
struct sensors_module_t HAL_MODULE_INFO_SYM = {
common: {
tag: HARDWARE_MODULE_TAG,
version_major: 1,
version_minor: 0,
id: SENSORS_HARDWARE_MODULE_ID,
name: "LGE Sensor module",
author: "LG Electronics Inc.",
methods: &sensors_module_methods,
dso: NULL,
reserved: {0}
},
get_sensors_list: sensors__get_sensors_list,
};
现在我不明白这里:
的含义是什么?是某种初始化还是其他什么?
我对C ++知之甚少。所以如果有任何链接或资源来理解这件事情将不胜感激。通过谷歌搜索我找不到多少。
答案 0 :(得分:12)
它是特定于编译器的扩展,是指定初始化程序的过时形式。 gcc实现记录在here。
在C中,你可能有:
struct point { int x, y; };
struct point p = { 10, 20 };
使用ISO C99中引入的指定初始化程序功能,您可以将其写为:
struct point { int x, y; };
struct point p = { .x = 10, .y = 20 };
但在C99之前,gcc使用不同的语法引入了类似的功能:
struct point { int x, y; };
struct point p = { x: 10, y: 20 };
gcc,或者更确切地说是g ++,也支持C ++模式,但C ++没有采用C99风格的指定初始化器。
gcc手册说这个功能的:
版本自1993年发布的gcc 2.5以来已经过时了,所以它绝对不应该用在新代码中。
请注意,如果初始值恰好是一个小整数常量,如示例所示:
version_major: 1,
version_minor: 0,
很容易与位字段的语法混淆。
对于C,.name = value
表单是有效且可移植的,只要您的编译器支持C99或更高版本。对于C ++,它不可移植,但只要您使用g ++或类似于它的clang编译器就可以使用C99语法。