鑑於此代碼: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