gpt4 book ai didi

c++ - 在 Android NDK 上检测 stdint.h 和 C++11

转载 作者:行者123 更新时间:2023-11-30 05:42:22 32 4
gpt4 key购买 nike

我发现某处可以使用以下行检测 C++11:

#if __cplusplus <= 199711L

我将其用于有条件地定义的固定宽度类型,例如 int32_t 或 uchar16_t 等...

问题是当使用android NDK时,__cplusplus被定义为1。是否有更便携的方法来检测 C++11 和 stdint.h 的存在以避免重新定义?

谢谢。

最佳答案

对我来说它总是有效:

$ CXX=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++
$ $CXX -x c++ -E -dM /dev/null | grep __cplusplus
#define __cplusplus 199711L
$ $CXX -x c++ -std=c++11 -E -dM /dev/null | grep __cplusplus
#define __cplusplus 201103L

LLVM 工具链也是如此:

$ CXX="$NDK/toolchains/llvm-3.5/prebuilt/darwin-x86_64/bin/clang++ -target armv7-none-linux-androideabi"
$ $CXX -x c++ -E -dM /dev/null | grep __cplusplus
#define __cplusplus 199711L
$ $CXX -x c++ -std=c++11 -E -dM /dev/null | grep __cplusplus
#define __cplusplus 201103L

我已经用 NDK r10d 和 r10e 试过了,它在这两个上都有效,所以你的设置肯定有问题。如果您提供存在此类问题的最小项目,我可以说更多。

关于c++ - 在 Android NDK 上检测 stdint.h 和 C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30710718/

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