Информация об изменениях

Сообщение Re: gcc 6: якобы "переменнные" размеры массивов в структуре от 25.05.2017 8:29

Изменено 25.05.2017 8:32 rg45

Re: gcc 6: якобы "переменнные" размеры массивов в структуре
Здравствуйте, Quarter-123, Вы писали:

Q1>
Q1>#include <stdio.h>

Q1>static const int                SZ = 100;
Q1>// #define                                      SZ 100

Q1>typedef struct Mdata {
Q1>        int             status;
Q1>        char    buf[SZ];
Q1>} Mdata;

Q1>int             
Q1>main(void)
Q1>{
Q1>        Mdata   dt = {.status = 1, .buf = "123" };
Q1>        printf("%d - %s\n", dt.status, dt.buf);
Q1>}
Q1>


Q1>однако gcc 6.3.0 отказывается его компилировать с вот такой замечательной ошибочкой:


Q1>
Q1>test_array.c:8:7: error: variably modified 'buf' at file scope
Q1>  char buf[SZ];
Q1>       ^~~
Q1>


Q1>соответственно вопрос к специалистам, можно ли как-то заставить gcc признать, что константа это константа и создать структуру?


У меня есть смутные подозрения, что дело не в константе. Проверь, пожалуйста, устраняется ли проблема в таком варианте:

Mdata   dt = { 1, "123" };
Re: gcc 6: якобы "переменнные" размеры массивов в структуре
Здравствуйте, Quarter-123, Вы писали:

Q1>однако gcc 6.3.0 отказывается его компилировать с вот такой замечательной ошибочкой:

Q1>
Q1>test_array.c:8:7: error: variably modified 'buf' at file scope
Q1>  char buf[SZ];
Q1>       ^~~
Q1>

Q1>соответственно вопрос к специалистам, можно ли как-то заставить gcc признать, что константа это константа и создать структуру?

У меня есть смутные подозрения, что дело не в константе. Проверь, пожалуйста, устраняется ли проблема в таком варианте:

Mdata   dt = { 1, "123" };