__builtin_constant_p(x) (转帖

Posted 请给我倒杯茶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__builtin_constant_p(x) (转帖相关的知识,希望对你有一定的参考价值。

本文转载自:http://blog.chinaunix.net/uid-29254195-id-3977753.html

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是变量。

以上是关于__builtin_constant_p(x) (转帖的主要内容,如果未能解决你的问题,请参考以下文章

kmalloc分配内存大小的限制和宏的一种用法

获取模块名称:x.__module__ vs x.__class__.__module__

获取模块名称:x.__module__ vs x.__class__.__module__

宏字符串:#define __T(x) x 是啥意思?和 __T(#x)?

松鼠搬家 ( 切比雪夫距离 到 曼哈顿距离 )

MT642017联赛一试不等式的一个加强练习