20

私はCでいくつかの既存のコードを持っています:

extern const struct sockaddr_un addr =
{
    .sun_family = AF_UNIX,
    .sun_path   = "myreallylongpath"
};

sun_path は文字配列です。

これは、古いバージョンの GCC で C として正常にコンパイルされていました。私は今それを C++ に変換し、GCC v4.7.2 を使用しています。エラーが発生し続けます:

「集約初期化子外の C99 指定子 'sun_path'」

私が C++ で行っていることを行うことはできませんか、それとも古い C とは構文が異なりますか?

4

1 に答える 1

23

指定初期化子は C99 で導入されました。GCC は GNU89 の拡張機能としてもサポートしていますが、C++ ではサポートしていません。

したがって、C++ でもサポートされている C89 スタイルを使用する必要があります。構造体には次の 2 つのフィールドしかないため:

extern const struct sockaddr_un addr =
{
    AF_UNIX,
    "myreallylongpath"
};

参考:指定イニシャライザ

于 2013-10-04T09:47:01.147 に答える