Почему эта программа на 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

Большинство компиляторов Си не позволяют объявлять статические массивы, размеры которых содержатся в переменных (т. Е. Размер массива определяется во время выполнения).

Попробуй это:

char array[] = {'A', 'B', 'C', 'D', 'E'};
Другие вопросы по тегам