Gegeben zurückzukehren:GCC-Fehler: Funktion könnte Kandidat für das Attribut ‚rein‘ sein, wenn bekannt ist, dieser Code normalerweise
#include <cstdlib>
void func(int x)
{
if (x)
abort();
};
g++ -Werror=suggest-attribute=pure
klagt:
error: function might be candidate for attribute ‘pure’ if it is known to return normally
Dies scheint seltsam zu mich- Ist es nicht offensichtlich, dass die Funktion nicht normal zurückkehrt? Gibt es eine Möglichkeit, GCC mitzuteilen, dass es nicht immer normal zurückkehrt oder dass diese Warnung für diese bestimmte Funktion nicht angezeigt werden soll?
Demo: https://godbolt.org/g/720VOT
Die Funktion hat keine Wirkung, aber die zurückgegebene Wert (das ist ein _no effect_ für sich selbst und dieser Wert hängt (nur) von Parametern ab. Es scheint ein guter Kandidat zu sein. Warum nicht? – skypjack
@skypjack: Die Funktion hat einen Nebeneffekt - sie kann 'abort()' aufrufen und dadurch das Programm beenden. Ich behaupte, dies bedeutet, dass es kein Kandidat für "reine" Optimierung ist. Denkst du anders? –
Oh, Sie erwarten, dass der Compiler _know_ das ist "abort". Stellen Sie sich vor, Sie verwenden einen Zeiger, dem Sie "abbrechen" zugeordnet haben, wäre Ihre Erwartung dieselbe? Ich denke nicht, dass es die Funktion inspiziert, es akzeptiert es einfach als einen 'void (void)' Funktionstyp, der aufgerufen wird, der den zurückgegebenen Wert nicht beeinflusst. Letzteres hängt also nur von den Parametern ab und die Funktion ist "rein". – skypjack