3

この質問が素朴に思えたら申し訳ありませんが、どこにも明確な答えを見つけることができませんでした. 次のように、以前に定義された定数に関して定数を定義する必要があります

#define CONST_A 2
#define CONST_B 3
#define CONST_C CONST_A*CONST_B

CONST_Aとの実際の値はCONST_B定義フラグとして gcc に渡されるため、単に#define CONST_C 6.

私が正しく理解していれば、これはプリプロセッサにCONST_Cby2*3と notの外観を置き換えるように指示し6ますよね? 私は主にパフォーマンスが心配なので、後者を好みます。static constこれは、 preprocessor の代わりに使用することで実行できると思い#defineます。これは最良の選択肢ですか?

前もって感謝します!

4

2 に答える 2

9

Cのような定数式のパフォーマンスについて心配する必要はありません2 * 3。C コンパイラは、少なくとも 20 年間、コンパイル時に定数式を評価することで、そのような式を排除することができました。

static const型安全性や優先順位を気にする必要がない (がCONST_Aとして定義されている場合に何が起こるかを考えてください) など、他の理由で優先される場合があります2+2が、パフォーマンス上の理由からではありません。

于 2013-01-10T11:05:56.453 に答える
0

C は、定数式はコンパイル時に評価できると言い、今日のまともなコンパイラはコンパイル時に定数式を評価します。このコンパイラ操作は、定数の折りたたみと呼ばれます。

(C99、6.6p2) 「定数式は、実行時ではなく変換中に評価できるため、定数が存在する可能性のあるあらゆる場所で使用できます。」

于 2013-01-10T11:17:29.620 に答える