Скажем, я хочу написать API (для C/Linux), который предлагает настраиваемый выходной поток, например stdout
, но мой должен быть вызван not_stdout
. Поэтому я могу потребовать, чтобы люди, использующие мой API, всегда начинали свою основную программу, вызывая функцию init_the_stream()
, которая инициализирует extern FILE* not_stdout
.Инициализация пользовательского потока вывода до основного
Но мне бы очень хотелось, чтобы мой поток был инициализирован до main()
, так что он работает так же, как stdout
.
Я бы предположил, что это несколько сложно сделать переносимым образом, так как стандарт C хочет, чтобы первичные инициализированные переменные были константами или строковыми литералами, а stdout
получает специальную обработку компилятора. Но я не уверен, поэтому я хочу спросить:
Возможно ли написать библиотеку C, чтобы начальная информация, например, extern FILE* not_stdout
, была инициализирована до первой строки main()
всякий раз, когда библиотека включена?
Как стандарт, определяемый 'main' как отправная точка языка, по-видимому, нет стандартного способа. Это зависит от вашей платформы. Но вы должны быть осторожны с такими автоматизмами. Используйте их только в том случае, если обычный способ имеет большое значение для кода. (чего я не вижу для вашей собственной библиотеки). – Olaf
Вы можете скрыть 'main()' в своей библиотеке и написать пользователю 'myMain', который вызывается оттуда. Так появился Microsoft 'WinMain()'. – tofro