реклама на сайте
подробности

 
 
> Объявление глобального массива в C, длина которого константная переменная
Grizzzly
сообщение Nov 26 2017, 15:37
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Удивлен, что компилятор Keil с включенным стандартом C99 не выдал ошибки для такого кода:

Код
const uint32_t N = 20;
static MyStruct_t Example[N];


В C в отличие от C++ const означает только read-only. Variable length array, появившийся в C99, применяется к локальным массивам в run-time.
Почему в моем случае нет ошибки для глобального массива? Странное поведение.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Nov 26 2017, 18:24
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



попробуйте компилировать с опцией --strict
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Nov 26 2017, 18:46
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(ViKo @ Nov 26 2017, 21:24) *
попробуйте компилировать с опцией --strict

Спасибо.
Для C90 совсем всё плохо, миллион ошибок сразу. Для C99 много ошибок при компиляции CMSIS следующего вида:

Код
/core_cm3.c", line 58: Error:  #667: "asm" function is nonstandard
  __ASM uint32_t __get_PSP(void)


И еще неизвестно, сколько их будет дальше. Надо тогда попробовать сделать совсем маленький проектик.

UPD.: Задал опцию --strict только для файла main.c, сразу получил ошибку в моем массиве sm.gif

Код
Error:  #28: expression must have a constant value


А не подскажете, где-нибудь в документации Arm Compiler перечислены их фичи, отличные от стандарта?

Цитата(one_eight_seven @ Nov 26 2017, 20:29) *
В общем-то так было всегда., сколько я ни мучаю gcc Так что либо смотрите на настройки компиляции, либо бегите от этого компилятора, как от огня. Какой бы он хороший ни был, если он не соответствует документации, то вы не можете ждать от него детерминированного результата.

А вы с опциями --pedantic или --ansi компилируете? Хочу понять, в GCC изначально более жесткое соблюдение стандарта или нет...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 10:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016