к сожалению развернуть llvm на этом устройстве (uname -a
Linux nserv 3.10.102 #15101 SMP Mon May 22 10:01:45 CST 2017 armv7l GNU/Linux synology_armada38x_ds116 ) пока невозможно,
соответственно вопрос к специалистам, можно ли как-то заставить gcc признать, что константа это константа и создать структуру?
Re: gcc 6: якобы "переменнные" размеры массивов в структуре
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Quarter-123, Вы писали:
Q1>>однако gcc 6.3.0 отказывается его компилировать с вот такой замечательной ошибочкой: Q1>>
Q1>>соответственно вопрос к специалистам, можно ли как-то заставить gcc признать, что константа это константа и создать структуру?
R>У меня есть смутные подозрения, что дело не в константе. Проверь, пожалуйста, устраняется ли проблема в таком варианте:
R>
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, Quarter-123, Вы писали:
Q1>>Увы, даже вот так валится
Q1>>[ccode] Q1>> gcc -o test_array test_array.c Q1>>test_array.c:8:7: error: variably modified 'buf' at file scope Q1>> char buf[SZ]; Q1>> ^~~
X>либо баг компилятора, либо я хз... X>у меня даже в Си режиме компилится этот код: X>http://coliru.stacked-crooked.com/a/b9b1b7452ce3547d
А какая у вас версия gcc/OS?
Re[3]: gcc 6: якобы "переменнные" размеры массивов в структуре
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Quarter-123, Вы писали:
R>>>
R>>>Mdata dt = { 1, "123" };
R>>>
Q1>>Увы, даже вот так валится
R>То есть, когда SZ определен при помощи макроса, работает, а по-другому нет? Это действительно странно. R>А если так: R>
R>static constexpr int SZ = 100;
R>
R>?
Именно. Про макросы то компилятор не знает...
с constexpr ожидаемо валится ввиду непонятного ключевого слова
Re[5]: gcc 6: якобы "переменнные" размеры массивов в структуре
Здравствуйте, Quarter-123, Вы писали:
Q1>Фикс классный, но вопрос, увы, не так стоит. А как заставить именно с const int заработать.
в Си нет других констант, кроме enum. так что я хз...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[7]: gcc 6: якобы "переменнные" размеры массивов в структуре
Здравствуйте, Quarter-123, Вы писали:
Q1>Фикс классный, но вопрос, увы, не так стоит. А как заставить именно с const int заработать.
а чем enum не подходит? это тоже интегральний тип, его можно использовать так же, как и const int.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[8]: gcc 6: якобы "переменнные" размеры массивов в структуре
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, Quarter-123, Вы писали:
Q1>>Фикс классный, но вопрос, увы, не так стоит. А как заставить именно с const int заработать. X>а чем enum не подходит? это тоже интегральний тип, его можно использовать так же, как и const int.
безусловно, равно как и определить через #define, но это достаточно некислое изменение многих файлов. Чего бы крайне не хотелось.
Re[7]: gcc 6: якобы "переменнные" размеры массивов в структуре
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Quarter-123, Вы писали:
Q1>>Фикс классный, но вопрос, увы, не так стоит. А как заставить именно с const int заработать.
R>Да уж, вопрос стоит так, что в С не работает даже предельно упрощенный вариант:
R>http://ideone.com/uHFQYX R>
Q1>к сожалению развернуть llvm на этом устройстве (uname -a Q1>Linux nserv 3.10.102 #15101 SMP Mon May 22 10:01:45 CST 2017 armv7l GNU/Linux synology_armada38x_ds116 ) пока невозможно,
Q1>соответственно вопрос к специалистам, можно ли как-то заставить gcc признать, что константа это константа и создать структуру?
Насколько я знаю нет, использование `const` в качестве размера массива не соотвествует стандарту,
`clang` то со скрипом можно заставить не принимать этот код:
`clang -std=c11 -pedantic -Werror test.c`
А среди расшерений языка С не соотвествующих стандарту нет ничего подходящего: https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
Единственный вариант переписать код в соответствии со стандартом или компилировать C код C++ компилятором (g++).
Re[5]: gcc 6: якобы "переменнные" размеры массивов в структуре