gcc的内建函数,当x为常数时返回1, x为变量时返回0. 不过这并不完全准确。
linux kernel的代码中经常有这样的代码:
if (__builtin_constant_p(x)) {
do1;
} else {
do2;
}
可以认为这个函数的求值在编译时就完成了。从而外面的条件跳转语句的两个分支,只有其中一个会出现在目标代码中。
准确的定义应该是:如果x的值在编译时能确定,那么该函数返回值为1.
例如,int len = sizeof(struct ...);紧接着的__builtin_constant_p(len)返回值就是1,尽管len是变量。
本文介绍了gcc的一个特殊内建函数__builtin_constant_p的功能与用法。该函数可以在编译阶段判断一个表达式的值是否能够确定,进而优化条件分支,使得在生成的目标代码中只保留一种可能的执行路径。
1937

被折叠的 条评论
为什么被折叠?



