Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用#ifdef检查是否使用了Xlib?_C++_X11 - Fatal编程技术网

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

C++ 如何使用#ifdef检查是否使用了Xlib?,c++,x11,C++,X11,例如,您可以通过检查是否定义了“WIN32”宏来检查是否使用了Windows。我希望得到相同的行为,但检查是否使用了Xlib。但我不知道Xlib定义了什么,也不知道它定义了什么。 如果你不知道我的意思,这里有一个例子: #ifdef WIN32 //Check if WIN32 is defined //Do something #endif 我想改变一下,当使用Xlib时,它会做一些事情 如果出现一些语法错误,我很抱歉,但我不是英语母语。宏WIN32仅在包含#包含之前或在编译器标志中设置宏(

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

#ifdef WIN32 //Check if WIN32 is defined
//Do something
#endif
我想改变一下,当使用Xlib时,它会做一些事情


如果出现一些语法错误,我很抱歉,但我不是英语母语。

WIN32
仅在包含
#包含
之前或在编译器标志中设置宏(
-DWIN32
)时才定义。对于Xlib,如果之前包含了
#include
,则可以使用非常类似的宏
X_协议

#ifdef X_PROTOCOL //Check if X_PROTOCOL is defined
//Do something
#endif
另一种方法是使用
\u XLIB\u H
,如果之前包含
\include
,但我不会,因为以下划线开头的标识符保留给实现,并且不能保证该标识符不会更改

您可以通过检查是否定义了“WIN32”宏来检查是否使用了Windows

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

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

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


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

只需查找
X11
头文件。在
/usr/include/X11
中有
Xlib.h
定义
\ux11\uxlib\uh
或者有
X.h
定义
X\uh
Xlib.h
是你的朋友。现在,在我看来,没有办法确定什么时候我应该使用Windows或Linux版本的代码而不出现任何错误:/@DigitCruser你可能想使用
\u WIN32
而不是
WIN32
,这将在没有任何包含的情况下工作。另请参见:您能让X_协议或其他东西在没有任何包含的情况下工作吗?@DigitCruser不幸的是,不能,因为编译器本身在编译时无法知道您的目标是Xlib。但是,您可以使用
\ifdef\uuuu linux\uuuuuu
检查目标是否是linux,或者在编译器设置/make文件中添加XLIB定义(即
-DXLIB
和签入code
\ifdef XLIB
,而不需要任何包含)。