Почему эта программа на C не компилируется? Что не так с этим?
Почему эта программа на C не компилируется? Что не так с этим?
Я попробовал это на wxDevC++
и Turbo C++ 3.0.
main.C
#include<stdio.h>
#include<conio.h>
const int SIZE = 5;
int main(int argc, char ** argv)
{
char array[SIZE] = {'A', 'B', 'C', 'D', 'E'};
printf("Array elements are,\n");
int i=0;
for(i=0 ; i<SIZE ; ++i)
{
printf("%c ", array[i]);
}
getch();
return 0;
}
Сообщения об ошибках обоих компиляторов похожи.
f:\_Source-Codes\main.c In function `main':
8 f:\_Source-Codes\main.c variable-sized object may not be initialized
4 ответа
Размер массива в языке C89/90 должен быть указан с помощью целочисленного константного выражения (в общем случае также верно для C99). const int
Объект в C не является константным выражением, поэтому вы не можете использовать его для указания размера массива. Примечание: это одно существенное различие между C и C++.
В языке Си термин константа относится к буквальным константам, т.е. 5
, 10.2
, 0xFF
, 'a'
и так далее (константы перечисления также являются константами, если быть точным). const int
Объект, опять же, не является константой в C и не может использоваться для построения константных выражений.
Если вы хотите предварительно объявить именованную константу для использования в качестве размера массива в C, вы должны использовать либо #define
или же enum
, То же самое относится к меткам регистра, размерам битовых полей и любому другому контексту, требующему постоянного выражения.
Смотрите это для более подробной информации.
Если компилятор обрабатывает его как файл.c, int i
объявление должно быть перед любыми исполняемыми строками, особенно перед printf
,
РЕДАКТИРОВАТЬ, теперь, когда вы показали сообщение об ошибке:
Компилятор не считает SIZE
как константа при компиляции main. Вы могли бы использовать #define SIZE 5
как обходной путь.
Согласно K & R 2nd Ed.:
"Цель
const
должен объявить объекты, которые могут быть помещены в постоянную память.... За исключением того, что он должен диагностировать явные попытки изменить const- объекты, компилятор может игнорировать квалификатор [const] ".
Так декларируя const int SIZE = 5
не делает SIZE
константное выражение, которое требуется спецификатору размера массива.
Попробуйте заменить
const int SIZE = 5;
с
#define SIZE 5
Большинство компиляторов Си не позволяют объявлять статические массивы, размеры которых содержатся в переменных (т. Е. Размер массива определяется во время выполнения).