Этот код недействителен в C , но действителен в C ++ :
C - http://www.ideone.com/mxgMo
Причина ошибки -: элемент инициализатора не является константой
C ++ - http://www.ideone.com/XzoeU
Работает .
Потому что:
C ++ Стандартные состояния:
3.6.1 Основная функция [basic.start.main]
1 Программа должна содержать глобальную функцию main, которая является назначенным началом программы. Это реализация, определяемая, требуется ли программе в автономной среде для определения главной функции. [Примечание: в автономной среде запуск и завершение определяются реализацией; запуск содержит выполнение конструкторов для объектов области имен пространства со статической продолжительностью хранения; Завершение содержит выполнение деструкторов для объектов со статической длительностью хранения . —Конечная записка]
Однако C99 говорит это:
56.7.8 Инициализация
4 Все выражения в инициализаторе для объекта со статической продолжительностью хранения
должны быть константными выражениями или строковыми литералами.
Так что не только код, который вы разместили, но что-то подобное также будет недействительным в C :
#include<stdio.h>
int needint(void);
int i =needint();
int needint(void)
{
return 1;
}
int main()
{
int j = i;
printf("i=%d , j=%d\n", i , j);
}
Смотрите здесь .