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

 
 
> Объявление глобального массива в 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
Ответов
one_eight_seven
сообщение Nov 26 2017, 17:29
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 916
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664



мой gcc ругается на это сразу: "variable modified array 'MyArray' at file scopoe", если я ставлю (не структуту, просто int'овый массив), если я делаю глобальный массив int MyArray[int].
если же я включаю его в тело функции, то он сообщает, что "storage size of 'MyArray' isn't constant.

В общем-то так было всегда., сколько я ни мучаю gcc Так что либо смотрите на настройки компиляции, либо бегите от этого компилятора, как от огня. Какой бы он хороший ни был, если он не соответствует документации, то вы не можете ждать от него детерминированного результата.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Nov 26 2017, 17:53
Сообщение #3


Знающий
****

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



Цитата(one_eight_seven @ Nov 26 2017, 20:29) *

От GCC я другого не ожидал sm.gif Тут нет вопросов. Задал тоже просто массив int'ов для Arm Compiler. Такая же фигня. Для успокоения совести выбрал C99 и добавил определение массива в main(), создался VLA. Для C90 это вызвало ошибку. То есть использование стандартов Си изменяется в настройках корректно. При этом как для C90, так и для C99 в случае глобального массива ни ворнингов, ни ошибок sad.gif Может быть, кто-то еще повторит подобное. Вдруг я где-то ошибся.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 03:40
Рейтинг@Mail.ru


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