gcc-10 (10.3.0) неправильно обрабатывает анонимную структуру?

$ gcc-10 --version
gcc-10 (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0

$ cat test.c
struct A {
    int a;
};

struct B {
    int b;
    struct A;
};

int main(void)
{
    struct B c;
    c.a = 0;
    c.b = 1;
    return 0;
}

$ gcc-10 test.c
test.c:7:13: warning: declaration does not declare anything
    7 |     struct A;
      |             ^
test.c: In function ‘main’:
test.c:13:6: error: ‘struct B’ has no member named ‘a’
   13 |     c.a = 0;
      |      ^

Добавление -std = c17 не имеет никакого значения. Я проверил (с параметром -v , что cc1 вызывается из правильного места ( / usr / lib / gcc / x86_64-linux-gnu / 10 / cc1 ]). Однако исходный код должен быть скомпилирован. Gcc 10.2.0 (используемый, например, в Cygwin) отлично справляется с этим кодом:

$ gcc --version
gcc (GCC) 10.2.0
$ gcc test.c
$

(без ошибок).

Это то, что было установлено как " gcc-10 ":

cc-10-base/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed,automatic]
gcc-10/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed]
libgcc-10-dev/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed,automatic]

Моя система:

$ uname -a
Linux xxx 5.11.0-25-generic #27~20.04.1-Ubuntu SMP Tue Jul 13 17:41:23 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Мы будем благодарны за любую помощь!

Спасибо!

0
задан 9 August 2021 в 23:57

1 ответ

Похоже, что -fms-extensions неявно определено в Cygwin, поэтому добавляем его явно в команду gcc на Ubuntu решает проблему.

0
ответ дан 20 August 2021 в 10:28

Другие вопросы по тегам:

Похожие вопросы: