Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
次のようなマクロがある場合:
#define MAX_SIZE ((1<<18)-1)
実行時にこの計算は既に行われており、MAX_SIZE はリテラルであることに安心できます。
私の質問は、次のような __builtin 関数を使用するとどうなるかということです。
#define BIT_OFFSET (__builtin_clz(MAX_SIZE))
これも実行時までに定数になりますか?
一部の値、一部のマシン、および一部のコンパイラの一部のバージョンでは、コンパイル時に__builtin_clz(constant)が評価されます。ただし、すべての値、すべてのマシン、およびすべてのコンパイラについて、コンパイル時に評価されるという保証はありません。gcc -Sを使用して、コンパイラがターゲットマシンで何を実行するかを確認します。