Как правильно писать платформо/компиляторо-специфичный код?

Иногда нужно написать код, зависящий от особенностей конкретной ОС или компилятора.

Например, есть некоторая функция foo, и я хочу, чтобы при компиляции этой функции под Windows был подключён заголовочный файл Windows.h, и моя функция foo вызывала некоторые WinAPI-функции из этого файла.

Или, например, если я компилирую foo с помощью g++, то хочу, чтобы foo использовала некоторые интринсики, специфичные для данного компилятора.

Как это правильно/надёжно/просто/принято реализовывать? Как функция foo может определить окружение, в котором она компилируется?


Ответы (1 шт):

Автор решения: user413919

Используйте что-то типа такого

#if defined(WIN32) && !defined(UNIX)
/* windows */
#elif defined(UNIX) && !defined(WIN32)
/* linux */
#else
/* other */
#endif
→ Ссылка