C++ 是否有预处理器宏让我知道应用程序是控制台类型还是其他类型?

C++ 是否有预处理器宏让我知道应用程序是控制台类型还是其他类型?,c++,c-preprocessor,compiler-constants,C++,C Preprocessor,Compiler Constants,我将编写一个小的print()函数。 但是,在上述函数中,我必须确定是否处理独立于操作系统的控制台应用程序。 (主要用于决定是使用std::cout还是使用与操作系统相关的MessageBox实现。) 如果没有自动生成的常量,是否还有其他适合多平台兼容的方法 我将把它包含在一个库中,这意味着我无法判断将使用哪个编译器或哪个IDE。在windows上,您可以将GetConsoleWindow()与一系列其他API调用结合起来,以了解应用程序是控制台类型还是GUI类型。就像在这篇文章中: 另请参见,

我将编写一个小的
print()
函数。
但是,在上述函数中,我必须确定是否处理独立于操作系统的控制台应用程序。
(主要用于决定是使用
std::cout
还是使用与操作系统相关的
MessageBox
实现。)

如果没有自动生成的常量,是否还有其他适合多平台兼容的方法


我将把它包含在一个库中,这意味着我无法判断将使用哪个编译器或哪个IDE。

在windows上,您可以将
GetConsoleWindow()
与一系列其他API调用结合起来,以了解应用程序是控制台类型还是GUI类型。就像在这篇文章中:


另请参见,

没有独立于平台的方法来确定应用程序是使用GUI还是控制台


这在UNIX平台上是非常困难的,因为在UNIX平台上有许多不同的GUI库,更不用说Wayland vs X11了。

如果您指的是预处理器宏之类的东西,那么我怀疑是否有类似的东西。一种方法是定义一个自定义宏,然后在编译过程中通过-D选项传递给程序。@jcxz:如果是用于构建库,即使在编译时,您也无法知道它是由控制台应用程序使用还是由GUI应用程序使用。在这种情况下,编译时宏没有任何用处,您必须(尝试)在运行时猜测。@SergeBallesta好的,您的库中仍然可以定义两个函数。一个控制台版本,一个gui版本,在每个调用站点中,您将调用一个宏,而不是这两个函数中的一个,这两个函数将根据编译器命令行上定义的宏扩展到适当的版本。OP最初询问的是某种常量,我认为他对编译时解决方案感兴趣。@jcxz:没错,宏可能位于
.h
中,因此实际调用将在程序编译时确定。好主意。如果是awswer,我会投赞成票:-)是的,但这个解决方案不能用于从图书馆内部打印。对于库内部的打印,需要运行时解决方案。但OP的问题并不清楚,他是否只想在库内部使用这个打印函数,还是希望库的用户调用这个函数。