Правильный способ решения подобных проблем - проверить, доступна ли функция, но это невозможно сделать надежно во время компиляции проекта. Вы должны добавить этап конфигурации, детали которого зависят от вашего инструмента сборки, и cmake, и scons, два кросс-платформенных инструмента сборки, предоставляют необходимые средства. В основном это выглядит так:
/* config.h */
#define HAVE_GETTICKSCOUNT64_FUNC
И тогда в вашем проекте вы делаете:
#include "config.h"
#ifdef HAVE_GETTICKSCOUNT64_FUNC
....
#else
...
#endif
Хотя это выглядит похоже на очевидный способ, в долгосрочной перспективе оно гораздо более ремонтопригодно. В частности, вам следует избегать как можно большей зависимости от версий и вместо этого проверять возможности. Проверка версий быстро приводит к сложным, чередующимся условным выражениям, тогда как с помощью описанной выше техники все управляется из одного config.h, который, как мы надеемся, будет сгенерирован автоматически.
В scons и cmake у них будут тесты, которые запускаются автоматически, чтобы проверить, доступна ли функция, и определить переменную в config.h или нет в зависимости от проверки. Основная идея состоит в том, чтобы отделить обнаружение / настройку возможностей от вашего кода .
Обратите внимание, что это может обрабатывать случаи, когда вам нужно создавать двоичные файлы, которые работают на разных платформах (скажем, на XP, даже если она построена на Vista). Это всего лишь вопрос изменения config.h. Если это происходит попросту, это всего лишь вопрос изменения config.h (у вас может быть скрипт, который генерирует config.h на любой платформе, а затем собирает config.h для Windows XP, Vista и т. Д.). Я не думаю, что это вообще относится к unix.