在C和GCC中使用带有返回参数的pure / const属性?

时间:2014-06-01 04:34:40

标签: c gcc const

是否可以将函数声明为pureconst(使用GCC属性),

使用返回参数? (其中参数用于返回值)。

例如:

void mid_v3_v3v3(float r_out[3], v0[3], v1[3])
{
    r_out[0] = (v0[0] + v1[0]) * 0.5f;
    r_out[1] = (v0[1] + v1[1]) * 0.5f;
    r_out[2] = (v0[2] + v1[2]) * 0.5f;
}

除了r_out之外,这个函数是const,有没有办法将参数标记为返回值,否则将函数视为const

请参阅: https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Function-Attributes.html

1 个答案:

答案 0 :(得分:1)

您自己的链接部分回答了这个问题。关于const:

  

除了参数之外,许多函数不检查任何值,除了返回值之外没有任何效果。基本上这只是比下面的纯属性稍微严格的类,因为不允许函数读取全局内存。

     

请注意,具有指针参数并检查指向的数据的函数不能声明为const。同样,调用非const函数的函数通常不能是const。 const函数返回void是没有意义的。

纯文档实际上是错误的自相矛盾的;它说该函数只能访问它的参数和/或全局变量,但是然后给出strlen(它访问其参数指向的成员)作为例子。

无论如何,对于你的“返回参数”用法,我认为这些方法中的任何一种都不可行。但是,你可以做的是使用一个返回包含结果数组的结构的函数;那么纯属性应该适用(假设示例,而不是文本,纯粹是正确的。)