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 回答