【发布时间】:2017-01-18 06:21:08
【问题描述】:
鉴于此代码:
#include <cstdlib>
void func(int x)
{
if (x)
abort();
};
g++ -Werror=suggest-attribute=pure 抱怨:
错误:如果已知函数正常返回,则该函数可能是属性“纯”的候选对象
这对我来说似乎很奇怪——不是很明显该函数不知道正常返回吗?有什么方法可以告诉 GCC 它并不总是正常返回,或者我不希望此特定功能出现此警告?
【问题讨论】:
-
该函数没有任何效果,但返回的值(对自身来说没有效果)并且该值(仅)取决于参数。这似乎是一个不错的候选人。为什么不呢?
-
@skypjack:该函数确实有副作用——它可以调用
abort()从而结束程序。我认为这意味着它不是“纯”优化的候选者。你不这么认为吗? -
哦,你希望编译器知道那是
abort。好吧,假设您使用一个指向您分配给abort的函数的指针,您的期望会相同吗?我认为它不会检查函数,它只是将其作为void(void)函数类型接受,以调用不影响返回值的函数类型。因此后者仅取决于参数,函数为pure。 -
@skypjack:我认为它不会检查函数,它只是将其作为
void(void)函数类型接受,以不影响返回值。 并非如此,abort被标记为noreturn,其目的正是影响此类分析 - 例如,this 触发“控制到达非无效函数的结尾”,取消注释最后的 @ 987654335@调用makes the warning go away,并且有一个函数总是调用abortmakes it suggested fornoreturnas well。 -
@MatteoItalia 有道理,只是有些想法可能是错误的。
标签: c++ gcc compiler-warnings pure-function