2013-02-15 13 views
1

我想用全局常量struct來管理一些子系統的配置。這意味着,我想用這樣的:有效使用C中的const結構而不是定義來分組配置參數?

const struct SystemConfig { 
    .channels = 5, 
    .mode = NORMAL_MODE, 
} SYSTEM_CONFIG; 

並在以後使用它在我的代碼平常一樣:

... 
numberOfChannels = SYSTEM_CONFIG.channels; 
mode = SYSTEM_CONFIG.mode; 
... 

我想用這種方式來跳過#define的。

我的問題是,如果編譯器會認識到這一點,並在編譯時將它們的值替換爲它們各自的值,考慮到一切都是恆定的?

編輯:對不起標記都Ç和C++,它現在固定的,我的問題只涉及Ç。我使用的編譯器是帶有ARM Cortex-M4目標的GCC。

+0

試試看! – Nocturno 2013-02-15 14:06:51

+0

找到的唯一方法是查看生成的彙編代碼。 – 2013-02-15 14:07:15

+2

'...如果編譯器會......'哪個編譯器?而且,既然它是用C和C++標記的,哪種語言? – Mike 2013-02-15 14:08:57

回答

0

我會使用靜態常量,因此您的結構在鏈接級別不可見。例如:

static const unsigned int channels = 5; 
unsigned numberOfChannels = channels; 

肯定會被編譯器優化。所以我不明白爲什麼現代編譯器無法優化您的示例。

如果是我,我會找到編譯器選項來輸出它放下的代碼。這是一個有趣的練習。

相關問題