1

一部のサブシステムの構成を管理するために、グローバル定数構造体を使用することを考えています。これは、次のようなものを使用したいことを意味します。

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

そして後でいつものように私のコードでそれを使用します:

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

このアプローチを使用して、をスキップしたいと思い#defineます。

私の質問は、コンパイラがこれを認識し、コンパイル時にすべてが一定であることを考慮して、値をそれぞれの値に置き換えるかどうかです。

編集:CとC ++の両方にタグを付けて申し訳ありませんが、現在修正されており、私の質問はCのみに関連しています。私が使用しているコンパイラは、ARMCortex-M4ターゲットを備えたGCCです。

4

1 に答える 1

0

static const を使用して、構造体がリンクレベルで表示されないようにします。例えば:

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

コンパイラによって最適化されることは間違いありません。したがって、最新のコンパイラがあなたの例を最適化できない理由もわかりません。

それが私だったら、敷設していたコードを出力するコンパイラ オプションを見つけるでしょう。面白い練習です。

于 2013-02-15T14:49:58.347 に答える