什么是 __XSI_VISIBLE?
What is __XSI_VISIBLE?
我正在为使用 gcc-arm-none-eabi-8-2019-q3-update
作为编译器的嵌入式系统开发 C/C++ 项目。
我添加了 time.h
的 strptime
函数的使用,但最初它是未定义的,我在编译器中发现包含:
#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?
来自https://pubs.opengroup.org/onlinepubs/9699919799/:
The X/Open System Interfaces (XSI) option is the core application programming interface for C and sh programming for systems conforming to the Single UNIX Specification. This is a superset of the mandatory requirements for conformance to POSIX.1-2017.
__XSI_VISIBLE
宏对 "vanilla" POSIX 接口进行可见扩展,否则将被禁止出现在名称 space 中。请记住,像 ISO C 和 POSIX 这样的 C 语言标准允许应用程序定义所有 non-standard 标识符(在 ISO C 和 "vanilla" POSIX 中,strptime
不保留, 你可以用那个名字写一个函数并且让它不受干扰)。通过定义 so-called 功能测试宏 您可以扩展标准标识符集并减少应用程序程序员可以定义的标识符。
您的编译器将其保持为 0,因为实现供应商选择在 s/he 需要时启用 XSI 是应用程序程序员的工作。应用程序程序员通过在包含 header 之前定义所需的功能测试宏来做到这一点,例如与
#define _POSIX_SOURCE
#define __XSI_VISIBLE 1
#include <time.h>
或将 -D__XSI_VISIBLE=1
传递给编译器。
我正在为使用 gcc-arm-none-eabi-8-2019-q3-update
作为编译器的嵌入式系统开发 C/C++ 项目。
我添加了 time.h
的 strptime
函数的使用,但最初它是未定义的,我在编译器中发现包含:
#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?
来自https://pubs.opengroup.org/onlinepubs/9699919799/:
The X/Open System Interfaces (XSI) option is the core application programming interface for C and sh programming for systems conforming to the Single UNIX Specification. This is a superset of the mandatory requirements for conformance to POSIX.1-2017.
__XSI_VISIBLE
宏对 "vanilla" POSIX 接口进行可见扩展,否则将被禁止出现在名称 space 中。请记住,像 ISO C 和 POSIX 这样的 C 语言标准允许应用程序定义所有 non-standard 标识符(在 ISO C 和 "vanilla" POSIX 中,strptime
不保留, 你可以用那个名字写一个函数并且让它不受干扰)。通过定义 so-called 功能测试宏 您可以扩展标准标识符集并减少应用程序程序员可以定义的标识符。
您的编译器将其保持为 0,因为实现供应商选择在 s/he 需要时启用 XSI 是应用程序程序员的工作。应用程序程序员通过在包含 header 之前定义所需的功能测试宏来做到这一点,例如与
#define _POSIX_SOURCE
#define __XSI_VISIBLE 1
#include <time.h>
或将 -D__XSI_VISIBLE=1
传递给编译器。