@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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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