繁体   English   中英

C/C++ 预处理器是否可以检测一些编译器选项?

[英]Is it possible for C/C++ preprocessor to detect some compiler options?

我有一个功能

static int include[MAX_NODE_NUMBER][MAX_NODE_NUMBER][MAX_NODE_NUMBER*MAX_NODE_NUMBER];
static bool calculated[MAX_NODE_NUMBER][MAX_NODE_NUMBER][MAX_NODE_NUMBER*MAX_NODE_NUMBER]={};

其中MAX_NODE_NUMBER是 200。只有当-mcmodel=large在 gcc/g++ 选项中时才能编译。 这两个静态变量只是为了缓存一些数据,所以它们不是那么必要。 是否可以像这样编码

#if <some condition>
static int include[MAX_NODE_NUMBER][MAX_NODE_NUMBER][MAX_NODE_NUMBER*MAX_NODE_NUMBER];
static bool calculated[MAX_NODE_NUMBER][MAX_NODE_NUMBER][MAX_NODE_NUMBER*MAX_NODE_NUMBER]={};
#endif

所以程序可以编译成大内存和小内存。

g++定义:

$ g++ -E -dD -xc++ /dev/null | grep -i model
#define __code_model_small__ 1

$ g++ -E -dD -xc++ -mcmodel=large /dev/null | grep -i model
#define __code_model_large__ 1

或者:

$ diff <(g++ -E -dD -xc++ /dev/null) <(g++ -E -dD -xc++ -mcmodel=large /dev/null)
270c270
< #define __code_model_small__ 1
---
> #define __code_model_large__ 1

您有命令行选项-D ,您可以在其中定义符号

例如

-DMODEL_LARGE

然后在您的源文件中:

#ifdef MODEL_LARGE
static int include[MAX_NODE_NUMBER][MAX_NODE_NUMBER][MAX_NODE_NUMBER*MAX_NODE_NUMBER];
static bool calculated[MAX_NODE_NUMBER][MAX_NODE_NUMBER][MAX_NODE_NUMBER*MAX_NODE_NUMBER]={};
#endif

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM