2017-08-06 4 views
1

Wenn ich mich richtig erinnere, sagte mein Professor einmal, dass das Übergeben von Dateizeiger als Argument zur Funktion als eine schlechte Programmierpraxis angesehen wird.Dateizeiger und Funktion

Kann jemand erklären warum?

EDIT: Tut mir leid, wenn ich hier eine Art heiliger Krieg verursacht habe, aber um wenigstens ein bisschen zu klären, sagte Professor lehrt Einführungskurs mit C. Er sagte etwas in dieser Richtung, gefolgt von etwas über "größere Programme" und nicht zu wissen, wer (welche Funktion) die Datei schließt.

Es passierte vor ein paar Monaten, als ich nicht zu viel Motivation hatte zu lernen und jetzt, als ich es tat, sprang mir einfach in den Kopf.

+2

Schlechte Praktiken sind in der Regel subjektiv und eine Frage der Meinung. Ich fürchte, Fragen wie diese werden als Thema für SO betrachtet. –

+0

Warum wird er 'fgets' nicht benutzen? – BLUEPIXY

+3

Es ist nicht falsch, einen Dateizeiger an eine Funktion zu übergeben. Vielleicht sprach der Professor über eine spezifischere Situation. – interjay

Antwort

-1

Es ist keine schlechte Praxis per se, einen Dateizeiger an eine Funktion zu übergeben. Wenn wir dieser Frage mehr Kontext hinzufügen, könnte dies zu einer schlechten Übung werden. Zum Beispiel ist es nicht ratsam, Dateizeiger an UI-Funktionalitäten zu übergeben, aber das Problem ist nicht, dass Dateizeiger schlecht sind, aber es ist gut, die Logik von der UI zu trennen.

Oder, wenn wir weiter darüber nachdenken, könnte eine Funktion etwas mit einer Datei tun, zum Beispiel löschen. In diesem Fall ist es nicht ratsam, den Dateizeiger an die Funktion zu übergeben, ohne sicherzustellen, dass alles in Ordnung ist. Die Funktion sollte alle allgemeinen Problemszenarien behandeln und der Ort, an dem Sie sie aufrufen, sollte spezifische Problemszenarien behandeln.

+1

Es ist deine Meinung nicht die Antwort. Ja, es ist eine gute Übung, Funktionen zu schreiben, die das machen, was sie tun sollen und ohne Bugs. –

+1

@PeterJ Ich bin überzeugt, dass es nichts falsch ist, Funktionszeiger als Parameter zu übergeben, bis das Gegenteil bewiesen ist. Dateizeiger sollten nicht generell an UI-Funktionen übergeben werden. Ich bezweifle, dass Sie jemanden finden, der ernst genommen werden kann, der eine andere Meinung haben könnte. Dies sind gängige Praktiken.Ja, ich könnte mich irren, aber da meine Aussagen begründet sind, würde ich gerne einige gute Argumente sehen, die auf eine andere Richtung hinweisen. Wenn Sie welche haben. –

+0

Was ist die UI-Funktion in C? Standard erwähnt nicht. Vielleicht sollten Sie Ihre Anfrage schreiben –

0

Ich denke, die Übergabe eines Dateizeigers ist die beste Vorgehensweise, denn selbst Standard-Build-in-Funktionen übergeben einige Dateizeiger (ex fprintf n fscanf). Wenn Sie jedoch keinen Dateizeiger übergeben, müssen Sie den Dateipfad übergeben oder einen globalen Dateizeiger erstellen. Im ersten Fall verlieren Sie Zeit beim Öffnen der Datei beim Funktionsaufruf (lassen Sie mich wissen, ob ich etwas verpasst hatte). Wenn Sie einen globalen Zeiger erstellen, den Sie nicht beachten, können Sie einfach das globale fp aufrufen, wenn es nicht geöffnet ist. Sorry für die lange Antwort und (hoffentlich nicht) Grammatikfehler

Verwandte Themen