如何使用#ifdef 检查是否使用了 Xlib?

How to check if Xlib is used using #ifdef?

例如,您可以通过检查是否定义了 "WIN32" 宏来检查是否使用了 Windows。我想获得相同的行为,但要检查是否使用了 Xlib。但我不知道 Xlib 定义了什么才能知道它的定义。 如果你不知道我的意思,这里有一个例子:

#ifdef WIN32 //Check if WIN32 is defined
//Do something
#endif

我想改变它,使它在使用 Xlib 时能做一些事情。

如果有一些语法错误,我很抱歉,但我不是以英语为母语的人。

WIN32 仅在您之前包含 #include <windows.h> 或在编译器标志 (-DWIN32) 中设置宏时才定义。对于 Xlib,如果您之前包含 #include <X11/X.h>,您可以使用非常相似的宏 X_PROTOCOL

#ifdef X_PROTOCOL //Check if X_PROTOCOL is defined
//Do something
#endif

另一种方法是使用 _XLIB_H_ 如果你之前包含 #include <X11/Xlib.h>,但我不会,因为以下划线开头的标识符保留给实现,并且不能保证这个标识符不会变的。

you can check if Windows is used by checking if "WIN32" macro is defined

WIN32 宏默认由针对 Windows OS 的编译器定义。它的目的是让程序检测WindowsOSAPI,不一定是任何图形子系统。

X11 不是和OS。它是 可选 用户空间软件,可以在许多操作系统(包括 Windows)下安装和运行。为 Windows 编译 X11 程序时,将定义 WIN32,就像任何其他 Windows 程序一样。

默认情况下,在安装了 X11 的系统上没有编译器定义任何内容。

如果您想在构建时检测 X11,最好的选择可能是 GNU autotools 或 CMake 等元构建工具。