Скажем, я объявляю следующую переменную:Декларирование и присвоения переменных с области файла в C
int num;
num = 0;
int main(void)
{
/* ... */
exit(EXIT_SUCCESS);
}
Компилятор придраться num
быть заявлен и что он будет по умолчанию тип int
. Этого не происходит, когда я делаю все это в одном шаге:
int num = 0;
или, если я перееду назначение в main()
:
int main(void)
{
num = 0;
/* ... */
exit(EXIT_SUCCESS);
}
Я когда-то читал объяснение такого поведения, но я не могу найти его больше , Может ли кто-нибудь обновить меня снова.
Я компиляция с
gcc -std=c11 -O2 -g -pedantic -Wall -c -fmessage-length=0 -v
Вы намерены 'Num = 0;' как заявление; заявления могут относиться только к функциям. Вместо этого компилятор интерпретирует его как объявление переменной, но без типа. –
@ Kerrek SB: Во-первых, нет такой вещи, как * заявление декларации * в C. В языках C заявления не являются утверждениями. Объявления всегда являются просто декларациями. * Заявления о декларации * существуют в C++, но не в C. Во-вторых, даже в C++ * заявления * должны находиться внутри функций. Даже в объявлениях на C++, сделанных в области пространства имен, все еще есть только * декларации *, а не * заявления декларации *. – AnT
@ АНТ: Вы правы, удалены. Я этого никогда не понимал. В C++ оператор объявления содержит только небольшое подмножество всех возможных объявлений. (В частности, голые точки с запятой, похоже, не действительны в области пространства имен в C++.) –