如果我有一个像这样的宏:
#define MAX_SIZE ((1<<18)-1)
我可以放心,到运行时这个数学已经完成,并且 MAX_SIZE 是一个文字。
我的问题是,如果我使用 __builtin 函数,例如:
#define BIT_OFFSET (__builtin_clz(MAX_SIZE))
这在运行时也会变成常量吗?
最佳答案
对于某些值、某些机器和某些编译器的某些版本,__builtin_clz(constant) 将在编译时进行评估。但不能保证它会在编译时针对所有值、所有机器和所有编译器进行评估。使用 gcc -S 查看编译器在目标计算机上执行的操作。
关于c - GCC 对宏中使用的 __builtin 函数的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10577149/