2

次のようなマクロがある場合:

#define MAX_SIZE ((1<<18)-1)

実行時にこの計算は既に行われており、MAX_SIZE はリテラルであることに安心できます。

私の質問は、次のような __builtin 関数を使用するとどうなるかということです。

#define BIT_OFFSET (__builtin_clz(MAX_SIZE))

これも実行時までに定数になりますか?

4

1 に答える 1

4

一部の値、一部のマシン、および一部のコンパイラの一部のバージョンでは、コンパイル時に__builtin_clz(constant)が評価されます。ただし、すべての値、すべてのマシン、およびすべてのコンパイラについて、コンパイル時に評価されるという保証はありません。gcc -Sを使用して、コンパイラがターゲットマシンで何を実行するかを確認します。

于 2012-05-14T03:49:20.537 に答える