Что такое __XSI_VISIBLE? - PullRequest
       120

Что такое __XSI_VISIBLE?

0 голосов
/ 09 мая 2020

Я работал над проектом C / C ++ для встроенной системы, которая использует gcc-arm-none-eabi-8-2019-q3-update в качестве компилятора.

Я добавил использование strptime функции time.h, но изначально она не была определена и я нашел в компиляторе включения:

#if __XSI_VISIBLE
 ...strptime...
#endif

Итак, я решил проблему с:

#undef __XSI_VISIBLE
#define __XSI_VISIBLE 1
#include <time.h>
#undef __XSI_VISIBLE
#define __XSI_VISIBLE 0

Теперь он работает НО:

  • Что есть Готово?
  • Что такое __XSI_VISIBLE?
  • Для чего?
  • Почему этот компилятор по умолчанию сохраняет значение 0?

1 Ответ

1 голос
/ 09 мая 2020

От https://pubs.opengroup.org/onlinepubs/9699919799/:

Опция X / Open System Interfaces (XSI) - это основной интерфейс прикладного программирования для C и sh программирования для систем в соответствии со спецификацией Single UNIX. Это надмножество обязательных требований для соответствия POSIX.1-2017.

Макрос __XSI_VISIBLE делает видимыми расширения «ванильных» интерфейсов POSIX, которые в противном случае были бы запрещены в пространство имен. Помните, что стандарты C языка, такие как ISO C и POSIX, позволяют приложению определять все нестандартные идентификаторы (в ISO C и «ванильном» POSIX strptime не зарезервирован, вы можете написать функцию с этим имя и пусть не мешает). Определяя так называемые макросы тестирования функций , вы расширяете набор стандартных идентификаторов и уменьшаете те, которые доступны для определения программистом приложения.

Ваш компилятор сохраняет его на 0, потому что поставщик реализации выбрал это задача прикладного программиста - включать XSI, когда он / она этого хочет. Прикладные программисты делают это, определяя макросы желаемой функции тестирования перед включением заголовка, например, с помощью

#define _POSIX_SOURCE
#define __XSI_VISIBLE 1
#include <time.h>

или передают -D__XSI_VISIBLE=1 компилятору.

...