[英]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.