从C到C++的常量结构中的char数组的静态初始化

Joe*_*Joe 15 c c++ gcc struct initialization

我在C中有一些现有的代码:

extern const struct sockaddr_un addr =
{
    .sun_family = AF_UNIX,
    .sun_path   = "myreallylongpath"
};
Run Code Online (Sandbox Code Playgroud)

sun_path是一个字符数组.

这用于在较旧版本的GCC中编译为C.我现在已将其转换为C++并使用GCC v4.7.2.我一直收到错误:

"C99指示符'sun_path'聚合初始化程序外"

是不是可以用C++做我正在做的事情,或者语法是否与旧的C不同?

Yu *_*Hao 17

在C99中引入了指定的初始化器,GCC也支持它们作为GNU89的扩展,但不支持C++.

所以你需要使用C89风格,C++也支持它.由于结构只有这两个字段:

extern const struct sockaddr_un addr =
{
    AF_UNIX,
    "myreallylongpath"
};
Run Code Online (Sandbox Code Playgroud)

参考:指定的初始化器

  • @Joe:这是POSIX规范的标准接口.它没有改变40年左右,如果不让天空坍塌就无法改变.在这个特殊情况下,我绝对不会担心. (3认同)