@available() и _builtin_available() в Linux и других системах, отличных от DarwinLinux

Anonymous
@available() и _builtin_available() в Linux и других системах, отличных от Darwin

Сообщение Anonymous »

В Clang есть функции @available() (ObjC) и _builtin_available() (C/C++), которые позволяют легко тестировать версию ОС во время выполнения. По крайней мере, они есть на Mac, также известном как Darwin.
Я знаю, что они основаны на слабом связывании с защищенными функциями (это означает, что они должны присутствовать на этапе связывания), но я на самом деле не знаю, что они предназначены не для более общей проверки версии ОС, которая может включать, например, вызов вспомогательного процесса.
Поэтому я удивлен, что эти функции систематически возвращают true в Linux (и, возможно, во всех других ОС, отличных от Darwin), независимо от аргументов, которые вы передаете. Было бы гораздо логичнее, если бы они возвращали false - в любом случае вы получите ошибки компилятора и компоновщика, если попытаетесь скомпилировать выражения, специфичные для Mac, в другой ОС.
Я спрашивал об этом в обсуждении LLVM форуме почти 2 года назад (https://discourse.llvm.org/t/builtin-av ... tems/78210) и только что понял, что не получил ни одной реакции.
Есть ли у кого-нибудь здесь идея, является ли это намеренным поведением и почему?

Подробнее здесь: https://stackoverflow.com/questions/798 ... in-systems

Вернуться в «Linux»