В стандарте ANSI указано, что команда '#pragma' имеет произвольный эффект, определяемый реализацией. В препроцессоре GNU C '#pragma' сначала пытается запустить игру 'мошеннически'; если это не удается, он пытается запустить игру «взломать»; если это не удается, он пытается запустить GNU Emacs, отображающий Ханойскую башню; если это не удается, он сообщает о фатальной ошибке. В любом случае предварительная обработка не продолжается.
— Ричард М. Столмен, Препроцессор GNU C, версия 1.34
Выполнение программы начинается с кода запуска или «времени выполнения». Обычно это какая-то процедура на ассемблере, называемая _start
или что-то в этом роде, расположенная (на машинах Unix) в файле crt0.o
, который поставляется с пакетом компилятора. Он выполняет настройку, необходимую для запуска исполняемого файла C (например, настройку stdin
, stdout
и stderr
, векторов, используемых atexit()
... для C++, он также включает инициализацию глобальных объектов, т.е. запуск их конструкторов). Только после этого управление переходит к main()
.
Как красноречиво говорит цитата в начале моего ответа, то, что делает #pragma
, полностью зависит от вашего компилятора. Проверьте его документацию. (Я предполагаю, что ваш pragma startup
, который, кстати, должен начинаться с #
, указывает среде выполнения сначала вызывать fun()
...)
person
DevSolar
schedule
01.08.2011