鉴于此代码:GCC错误:功能可能是候选属性“纯”,如果它被称为正常返回
#include <cstdlib>
void func(int x)
{
if (x)
abort();
};
g++ -Werror=suggest-attribute=pure
抱怨:
error: function might be candidate for attribute ‘pure’ if it is known to return normally
这似乎很奇怪,以我 - 是不是明显知道该函数不能正常返回?有什么办法可以告诉GCC它并不总是正常返回,或者我不希望这个警告出现在这个特定的函数中?
演示:https://godbolt.org/g/720VOT
功能没有任何影响,但返回的值(即是一个_no effect_本身)并且该值取决于(仅)参数。这似乎是一个好的候选人。为什么不? – skypjack
@skypjack:该函数确实有副作用 - 它可以调用abort()来结束程序。我认为这意味着它不是“纯粹”优化的候选者。你有其他想法吗? –
哦,你希望编译器知道这是'中止'。那么,想象一下你使用一个指向你分配'abort'的函数的指针,你的期望会是一样的吗?我不认为它检查函数,它只是接受它作为一个'void(void)'函数类型被调用,不影响返回的值。因此后者仅取决于参数,功能是“纯”的。 – skypjack