Конечно, это полностью зависит от вашей среды сборки и не имеет ничего общего с самим C.
Одна вещь, которую вы можете попробовать, это настроить пути включения в ваших make-файлах так:
INCDIRS=-I ./solaris
#INCDIRS=-I ./windows
#INCDIRS=-I ./linux
:
CC=gcc $(INCDIRS) ...
и раскомментируйте тот, над которым вы работаете. Затем поместите заголовки для вашей платформы в эти каталоги:
./solaris/io.h
./windows/io.h
./linux/io.h
Вы можете, в крайнем случае, даже иметь разные make-файлы платформы, такие как solaris.mk
и windows.mk
, и вообще не иметь необходимости редактировать какие-либо файлы.
Но я не вижу вашего отвращения к препроцессору, это одна из тех вещей, в которых он хорош, и люди успешно делают это на протяжении десятилетий. Кроме того, что происходит, когда ваш код необходимо изменить для каждой платформы. Вы можете абстрагировать код в заголовочные файлы, но управлять им гораздо сложнее, чем несколько #ifdef
с.