gpt4 book ai didi

c++ - 如何可移植地检测编译器是否支持 vs

转载 作者:太空宇宙 更新时间:2023-11-04 15:50:55 27 4
gpt4 key购买 nike

我正在开发一个需要能够在标准 C++ 编译器和准标准编译器上编译的实用程序。代码可以而且将会被扔到几乎任何现有的 C++ 编译器上。

我正在寻找一种可靠且可移植地确定目标编译器是否支持带或不带 .h 扩展名的头文件的方法。我还需要检测是否支持命名空间。这两种需求可能会也可能不会。

一点背景知识:该实用程序是 Perl 的 Inline::CPP 语言扩展。扩展名自动包含 <iostream> ,并尝试猜测是否需要“.h”(当然还有编译器是否支持命名空间)。但它在这方面远非完美,而且这个问题正在削弱该实用程序的实用范围。

所以重申这个问题:我如何可移植地检测编译器是否支持标准 header ,例如 <iostream> ,或预标准 header ,例如 <iostream.h>

最佳答案

不在代码中,而是在构建/配置系统中。例如在 CMake 中,您可以使用 try_compile并为其提供示例文件。

...
try_compile(PRE_STANDARD_HEADERS tmp_builds pre_standard_headers_test.cpp)
if ( ${PRE_STANDARD_HEADERS} )
add_definitions( -D PRE_STANDARD_HEADERS )
endif()

您需要制作 pre_standard_headers_test.cpp .. 只是一个简单的可编译 exe,例如 #include

然后在你的正常代码中只是一个

#ifdef PRE_STANDARD_HEADERS

会成功的。

关于c++ - 如何可移植地检测编译器是否支持 <iostream> vs <iostream.h>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8530502/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com