简体   繁体   English

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

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

I have a function with我有一个功能

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]={};

where MAX_NODE_NUMBER is 200. This can be compiled only when -mcmodel=large is in the gcc/g++ option.其中MAX_NODE_NUMBER是 200。只有当-mcmodel=large在 gcc/g++ 选项中时才能编译。 The two static variables are only to cache some data so they are not so necessary.这两个静态变量只是为了缓存一些数据,所以它们不是那么必要。 Is it possible to code like是否可以像这样编码

#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

so the program can be compiled for both large memory and small memory.所以程序可以编译成大内存和小内存。

g++ defines: 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

Alternatively:或者:

$ 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

you have command line option -D where you can define symbol您有命令行选项-D ,您可以在其中定义符号

for example例如

-DMODEL_LARGE

then in your source file:然后在您的源文件中:

#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