Ich lerne C und ich sah in einem Buch, dass ein Funktionsprototyp die Form void f () hat und in der Funktionsdeklaration oder in der aufrufenden Funktion die f-Funktion Argumente übernimmt. So haben wir in der Funktionsdeklaration etwas wie void f (long double y [], long double A) und in der aufrufenden Funktion f (y, A). Die Funktion führt Operationen an dem Array aus, d.h., wenn die Funktion aufgerufen wird, ändern sich einige Elemente in dem Array y. A ist nur ein konstanter numerischer Wert, der sich nicht ändert. Ich habe zwei Fragen:
Wenn Sie den Funktionsprototyp oben im Programm als void f () definieren? Oder ist es besser, es als void f (long double y [], long double A) wie in der Funktionsdeklaration zu setzen?
Die aufgerufene Funktion f ändert Elemente im Array y. Ist der richtige Rückgabetyp ungültig? Das Programm funktioniert als solches mit dem leeren wie beschrieben.
Oder sollte ich alle meine "Voids" in "Long Double" ändern.
Ich arbeite mit long double, da ich so viel Präzision wie möglich benötige, obwohl auf meiner Maschine sowohl Doppel als auch Long double mir 15 Präzisionsziffern geben.
Vielen Dank
Wenn der Funktionsprototyp bei definiert wird die Spitze im Programm als void f () a gute Übung? Oder ist es besser zu sagen es als leer f (lang doppelt y [], lang Doppel A) wie in der Funktion Erklärung?
Definitiv letzteres - das erste gibt dem Compiler keinerlei Typinformationen für Kompilierzeitprüfungen. void f()
teilt dem Compiler mit, dass f
eine nicht spezifizierte Argumentliste verwendet. I.e. alles geht.
Die aufgerufene Funktion f ändert sich Elemente im Array y. Ist das ungültig? richtiger Rückgabetyp? Das Programm ist funktioniert so gut mit der Leere als beschrieben.
Der Rückgabetyp hat nichts mit dem zu ändernden Parameter zu tun. Wenn Sie jedoch einen Erfolgscode angeben möchten, können Sie den Rückgabetyp void
verwenden.
Ihre Frage leidet unter einer terminologischen Verwechslung.
%Vor%ist nicht ein Funktionsprototyp in C. Dies ist eine Funktionsdeklaration , die keinen Prototyp einführt. Inzwischen
%Vor% ist auch eine Funktionsdeklaration, und diese ist ein Prototyp (d. h. sie führt einen Prototyp für f
ein).
Um Ihre Fragen zu beantworten, ja, es ist immer eine gute Übung, Funktionen mit Prototypen zu deklarieren (d. h. es ist besser, sie mit Prototypen zu deklarieren als ohne Prototypen). Normalerweise sollten Sie Prototypen für alle Ihre externen Funktionen deklarieren (und void f()
ist kein Prototyp).
Was die Rückgabetypen betrifft, ist alles eine Frage Ihrer Absicht. Ich sehe nicht, dass die Tatsache, dass Sie die Elemente des Arrays ändern, es besser machen sollte, long double
anstelle von void
zurückzugeben.
Nein, es ist nicht gut, eine Deklaration mit nicht spezifizierten Argumenten zu haben. In C (aber nicht in C ++) ist es erlaubt, eine Funktion als f()
zu deklarieren, ohne das Argument anzugeben, aber die Verwendung dieser Funktionalität sollte vermieden werden. Wenn die Funktion keine Argumente akzeptiert, verwenden Sie f(void)
, um dies explizit zu markieren. Wenn die Funktion ein Argument akzeptiert, sollten Sie die Typen der Argumente immer in die Deklaration einschließen.
Tags und Links c