C-Funktion Prototyp: void f (). Ist es empfehlenswert?

7

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:

  1. 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?

  2. 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

    
yCalleecharan 04.04.2010, 09:55
quelle

3 Antworten

7
  

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.

    
Alex Budovski 04.04.2010, 09:59
quelle
10

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.

    
AnT 04.04.2010 10:16
quelle
4

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.

    
Anders Abel 04.04.2010 09:58
quelle

Tags und Links