Nein, eine "unreine" Funktion ist eine Funktion mit Nebenwirkungen.
Mit anderen Worten, egal wie oft Sie es nennen, eine reine Funktion beeinflussen nichts anderen als seinen Ausgang.
Zum Beispiel foo
ist unrein, obwohl sie zurückkehren Null:
int x;
int foo() { x++; return 0; }
int bar() { return x; }
Wenn foo
rein waren, nannte es nicht das Ergebnis bar()
beeinflussen.
printf
ist unrein, weil sein Ergebnis "Nebenwirkungen" hat - speziell druckt es etwas auf dem Bildschirm (oder in einer Datei, etc).
Wenn es rein wäre, dann könnten Sie es eine Milliarde Mal nennen und sicher sein, dass nichts Schlimmes passieren würde.
Aber wenn Sie eigentlich printf
eine Million Mal anrufen, gibt es sicherlich einen Unterschied für den Benutzer - es füllt seinen Bildschirm (oder Speicherplatz, oder was auch immer). Also klar ist es nicht rein.
Außerdem: Wenn Ihre Ausgabe umgeleitet wurde, um Ihre eigene Eingabe zu sein (etwas nutzlos, aber immer noch), würde Anruf printf
beeinflussen, was Sie von getchar
erhalten würden. :) So ist es auch direkt beobachtbar.
Diese Antwort ist zwar korrekt, hat aber nichts mit 'printf' zu tun. Es wird auch nicht angesprochen ** WHY ** 'printf' ist unrein (extern - im Gegensatz zu internen - Nebenwirkungen). –
Sind alle Funktionen unrein? Sie haben Zeit zum Ausführen (Philosophie)! BTW - 'bar' kehrt zurück x –
@DavidTitarenco: Du hast Recht, ich habe nur hinzugefügt, danke! – Mehrdad