在声明编译器可以看到的函数或静态成员不访问全局内存时,在gcc中为c ++程序使用__attribute((const))
是否有任何价值?
例如
int Add( int x , int y ) __attribute((const))
{
return x+y;
}
编译器知道此函数的内存访问范围受到限制。该属性是否添加任何内容?如果是这样,什么?
谢谢,
乔什
GNU C中的[__attribute__((const))
表示函数作者的意图是不依赖于其输入参数以外的任何值。
这允许编译器将具有对该函数相同参数的多个调用优化为单个调用,而不必分析函数主体。如果函数的主体位于另一个翻译单元中,则此功能特别有用。
在__attribute__((const))
的情况下,对多个调用,例如int Add( int x , int y ) __attribute__((const))
,可以合并为一个调用,并且可以缓存返回值,而无需知道Add(2,3)
的实际作用。
它还允许编译器验证函数是否确实符合声明的意图。
有关更多详细信息和示例,请参考Add
。>>