他のプリプロセッサ定数を使用して操作を実行する#defineを作成した場合、実行時にマクロが表示されるたびに最終値が計算されますか?これはコンパイラの最適化に依存しますか、それとも標準でカバーされていますか?
例:
#define EXTERNAL_CLOCK_FREQUENCY 32768
#define TIMER_1_S EXTERNAL_CLOCK_FREQUENCY
#define TIMER_100_MS TIMERB_1_S / 10
TIMER_100_MSマクロを使用するたびに、実行時に32768/10の操作が発生しますか?
次のことは避けたいと思います。
#define EXTERNAL_CLOCK_FREQUENCY 32768
#define TIMER_1_S EXTERNAL_CLOCK_FREQUENCY
#define TIMER_100_MS 3276
概要
コンパイラーは、コンパイル時に配列サイズなどを計算するために必要であるため、定数積分式を評価できる必要があります。ただし、標準では、「できる」(「しなければならない」ではなく)としか書かれていません。したがって、脳死したコンパイラだけがコンパイル時に定数積分式を評価しませんが、型にはまらないコンパイラのアセンブリ出力を簡単にチェックすると、それぞれのケースが検証されます。