取决于gcc开关的条件代码

取决于gcc开关的条件代码,c,gcc,macros,c-preprocessor,C,Gcc,Macros,C Preprocessor,我想使用基于gcc开关的#if指令交叉编译特定的32位和64位代码 是否有任何由GCC设置的宏可以用来代替使用-D开关设置宏 我可以在预处理器阶段选择gcc命令选项中使用的开关来测试它们吗 到目前为止,我发现-m64在我的64位机器上定义 __x86_64__ 鉴于-m32未定义 __i386__ __i486__ __i586__ __i686__ 您可以使用中的INT\u MAX值。这是C语言,所以独立于编译器 您还可以根据编译器选项检查是否有其他预定义宏 一般来说,最近建议

我想使用基于gcc开关的#if指令交叉编译特定的32位和64位代码

是否有任何由GCC设置的宏可以用来代替使用-D开关设置宏

我可以在预处理器阶段选择gcc命令选项中使用的开关来测试它们吗

到目前为止,我发现-m64在我的64位机器上定义

   __x86_64__
鉴于-m32未定义

   __i386__ __i486__ __i586__ __i686__

您可以使用
中的
INT\u MAX
值。这是C语言,所以独立于编译器

您还可以根据编译器选项检查是否有其他预定义宏


一般来说,最近建议编写可移植的代码,同时使用
if
测试仅在特定体系结构上适用的条件。优化器将删除不需要的分支。

您可以使用
中的
INT\u MAX
值。这是C语言,所以独立于编译器

您还可以根据编译器选项检查是否有其他预定义宏


一般来说,最近建议编写可移植的代码,同时使用
if
测试仅在特定体系结构上适用的条件。优化器将删除不需要的分支。

交叉编译时此值的相关性如何?这些值取决于目标(如类型和二进制代码)。主人不要紧。标题也依赖于目标,如果仔细观察,您会在正常标题中看到带有arch name的
#ifdef
(请参阅)。注意:最近,最好不要进行交叉编译,而是使用模拟器并从那里运行gcc:第三方库的问题少了很多(通常它们的构建脚本不支持交叉编译)。交叉编译时该值的相关性如何?这些值与目标相关(如类型和二进制代码)。主人不要紧。标题也依赖于目标,如果仔细观察,您会在正常标题中看到带有arch name的
#ifdef
(请参阅)。注意:最近,最好不要进行交叉编译,而是使用模拟器并从那里运行gcc:第三方库的问题要少得多(它们的构建脚本通常不支持交叉编译)。