C ++中的结构初始化

吉加·帕特尔(Jeegar Patel)

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 ++不太了解。因此,如果有任何了解此事的链接或资源,将不胜感激。我无法通过谷歌搜索找到很多东西。

基思·汤普森

它是特定于编译器的扩展,是指定的initializer的过时形式gcc实现记录在这里

在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语法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章