Spec-Zone.ru › GCC 9 CPP

4.2.8 __has_include

Специальный оператор __has_include (operand) может использоваться в выражениях «#if» и «#elif» для проверки, можно ли включить заголовок, на который ссылается его операнд, с помощью директивы «#include». Использование оператора в других контекстах некорректно. Операнд принимает ту же форму, что и файл в директиве «#include» (см. Синтаксис включения), и вычисляет ненулевое значение, если заголовок можно включить, и нулевое в противном случае. Обратите внимание, что возможность включения заголовка не подразумевает, что заголовок не содержит недопустимых конструкций или директивы «#error», которые могут привести к ошибке препроцессора.

Оператор __has_include сам по себе, без операнда или скобок, действует как предопределенная макрос, чтобы можно было протестировать его поддержку в переносимом коде. Таким образом, рекомендуется использовать оператор следующим образом:

#if defined __has_include
#  if __has_include (<stdatomic.h>)
#    include <stdatomic.h>
#  endif
#endif

Первый тест «#if» выполняется успешно только тогда, когда оператор поддерживается используемой версией GCC (или другим компилятором). Только при успешном выполнении этого теста допустимо использовать __has_include как оператор препроцессора. В результате объединение двух тестов в одно выражение, как показано ниже, будет допустимо только с компилятором, который поддерживает этот оператор, но не с другими, которые не поддерживают его.

#if defined __has_include && __has_include ("header.h")   /* not portable */
…
#endif

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/cpp/_005f_005fhas_005finclude.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API