簡體   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