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 查看编译器在目标机器上做了什么。