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