如果我有像这样的宏:
#define MAX_SIZE ((1<<18)-1)
我可以放心,通过运行时,这个数学已经完成,MAX_SIZE是一个文字。
我的问题是,如果我使用__builtin函数,例如:
,该怎么办?#define BIT_OFFSET (__builtin_clz(MAX_SIZE))
这也会在运行时变为常量吗?
答案 0 :(得分:3)
对于某些值,某些机器以及某些编译器的某些版本,__ builtin_clz(常量)将在编译时进行评估。但是无法保证在编译时对所有值,所有计算机和所有编译器进行评估。使用gcc -S查看编译器在目标计算机上执行的操作。