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
所以大内存和小内存都可以编译程序
您有命令行选项 -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
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
我有一个功能
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
所以大内存和小内存都可以编译程序
您有命令行选项 -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
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