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

 
 
> Объявление глобального массива в 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, 20:11
Сообщение #2


Знающий
****

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



Цитата
А вы с опциями --pedantic или --ansi компилируете? Хочу понять, в GCC изначально более жесткое соблюдение стандарта или нет...

Без опций.
Собственно, листинг моего Makefile:
Код
CFLAGS=-g -Wall -O0

falsenoerror: falsenoerror.o


сам код:
Код
#include <stdio.h>
#include <stdint.h>

const uint32_t N = 20;


int main () {
    static int MyArray[N];

    for (int i=0 i < N; i++) {
        MyArray[i] = i;
        print ("MyArray %d = %d", i, MyArray[i])
    }
    return 0;
}


Естественно, если вынести строку
Код
static int MyArray[N];

из тела main, ничего не изменится.

Сообщение отредактировал one_eight_seven - Nov 26 2017, 21:09
Go to the top of the page
 
+Quote Post



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

 


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


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