Учитывая этот код: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
Это кажется странным me-- разве не очевидно, что функция, как известно, не возвращается нормально? Есть ли способ сказать GCC, что он не всегда возвращается нормально, или что я не хочу, чтобы это предупреждение появлялось для этой конкретной функции?
Демо: https://godbolt.org/g/720VOT
функция не имеет никакого эффекта, но возвращаемое значение (т.е. это _no effect_ для себя), и это значение зависит (только) от параметров. Это хороший кандидат. Почему нет? – skypjack
@skypjack: функция имеет побочный эффект - она может вызывать 'abort()', тем самым заканчивая программу. Я утверждаю, что это не кандидат на «чистую» оптимизацию. Вы думаете иначе? –
О, вы ожидаете, что компилятор будет _know_, это 'abort'. Итак, представьте, что вы используете указатель на функцию, которой вы назначили 'abort', будет ли ваше ожидание одинаковым? Я не думаю, что он проверяет функцию, она просто принимает ее как вызываемый тип 'void (void)', который не влияет на возвращаемое значение. Последнее, таким образом, зависит только от параметров, а функция «чиста». – skypjack