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