Ссылаясь на: Как использовать LLIST * mylist [N];

Это действительно работает

LLIST *mylist[10] = {NULL}; 

Но если бы я хотел это сделать, я получаю ошибки:

int x=10; 

LLIST *mylist[x] = {NULL};

x может быть любым значением, я пока устанавливаю его на 10. x будет использоваться как счетчик.


person MRP    schedule 22.01.2010    source источник
comment
Разве это не должно быть, кстати, NULL вместо {NULL}?   -  person emil    schedule 23.01.2010
comment
нет, {NULL} - это допустимый способ инициализировать массив нулями.   -  person John Weldon    schedule 23.01.2010
comment
О, не знал этого. Это тоже функция C99?   -  person emil    schedule 23.01.2010


Ответы (1)


Поддержка массивов переменной длины (которые используются во втором примере) входит в стандарт C99, который ваш компилятор может не поддерживать.

Для gcc вы должны передать параметр -std=c99 при компиляции.

person Kyle Lutz    schedule 22.01.2010
comment
Я использую make-файл, который я запускаю для компиляции - person MRP; 23.01.2010
comment
В этом случае вы должны изменить CFLAGS и добавить -std=c99. - person Kyle Lutz; 23.01.2010
comment
@MRP: Затем установите переменную среды CFLAGS, чтобы включить -std=c99 - person rampion; 23.01.2010
comment
Я новичок в использовании c и компиляции - person MRP; 23.01.2010
comment
вот мой make-файл CC = gcc CFLAGS = -Wall -g # LIBS = -lreadline -lm OBJS = llist.o myprogram.o INCLUDES = llist.h all: $ (OBJS) $ (CC) $ (CFLAGS) $ ( OBJS) $ (LIBS) -o myprogram .co: $ *. H $ (ВКЛЮЧАЕТ) $ (CC) $ (CFLAGS) -c $ *. C clean: rm -f * .o myprogram - person MRP; 23.01.2010
comment
я бы хотел, чтобы был лучший способ опубликовать это - person MRP; 23.01.2010
comment
Могу ли я просто добавить CFLAGS = -Wall -g -std = c99 - person MRP; 23.01.2010
comment
Юпп, работает нормально? Или вы все еще получаете те же ошибки компилятора? - person emil; 23.01.2010
comment
а это значит, что компилятор не знает, как долго он должен инициализировать ваш массив во время компиляции, тогда вам нужно будет выполнить #include ‹strings.h› ... bzero (mylist, sizeof ( СПИСОК *) * x); - person emil; 23.01.2010
comment
У меня есть #include ‹strings.n› Я никогда не слышал о функции bzero .. Моя первоначальная мысль при запуске этой программы, было бы проще сделать список ссылок списков ссылок .. определение размера массива произвольного числа не имеет смысла. - person MRP; 23.01.2010
comment
Это правильный способ реализации: LLIST * mylist [] = {NULL}; bzero (mylist, sizeof (LLIST *) * x); - person MRP; 23.01.2010
comment
он действительно компилируется, это хорошие новости, я просто не знаю, работает ли он так же - person MRP; 23.01.2010
comment
LLIST * mylist [] = {NULL}; то же самое, что и запись LLIST * mylist [1] = {NULL}; вам следует изменить LLIST * mylist [] = {NULL}; в LLIST * mylist [x]; а потом сделай свой бзеро. в противном случае вам придется выделить массив самостоятельно с помощью ex. маллок (3) - person emil; 23.01.2010
comment
так что у меня есть ... int x; СПИСОК * mylist [x]; х = 10; затем bzero (mylist, sizeof (LLIST *) * x); - person MRP; 23.01.2010
comment
int x = 10; СПИСОК * mylist [x]; затем bzero (mylist, sizeof (LLIST *) * x); В противном случае x будет иметь случайное значение, когда он будет определять размер массива mylist. - person emil; 23.01.2010