2016-08-24 5 views
0

Ich erkläre immer Funktionen vor main(). Was mich verwirrt, ist die korrekte (oder zumindest bewährte) Methode zum Deklarieren, Definieren, Zuweisen und Übergeben von Funktionsargumenten. Zum Beispiel, das funktioniert:Proper C Funktion Argument Variable Definition Ort

// EXAMPLE 1 // 
int idum1 = 1; 

void my_func(int); // Says the function's going to need an integer. 

void main (void) 
{ 
    my_func(idum1); 
} 

void my_func(idum2) // Is this then declaring AND defining a local integer, idum2? 
{ 
    // Do stuff using idum2... 
} 

Das funktioniert aber auch:

// EXAMPLE 2 // 
int idum1 = 1; 

void my_func(int idum2); //Is this declaring a variable idum2 local to my_func? 

void main (void) 
{ 
    my_func(idum1); 
} 

void my_func(idum3) // A different variable or the same one (idum2) still works. 
        //Is this declaring idum3 as a local integer? 
{     //What happened to idum2, still a viable integer in the function? 
    // Do stuff using idum3... 
} 

Und das funktioniert:

// EXAMPLE 3 // 
int idum1 = 1; 

void my_func(int idum2); // Declaring... 

void main (void) 
{ 
    my_func(idum1); 
} 

void my_func(int idum2) //Declaring again. Different address as in function declaration? 
         //Same variable and address? 
{ 
    // Do stuff using idum2... 
} 

Und so tut dies:

// EXAMPLE 4 // 
int idum1 = 1; 

void my_func(int); 

void main (void) 
{ 
    my_func(idum1); 
} 

void my_func(int idum2) //Yet another way that works. 
{ 
    // Do stuff using idum2... 
} 

I‘ Ich bin ein autodidaktischer Anfänger, aber ich habe für Sie gequietscht Ars nicht wirklich den richtigen Weg und was passiert hinter den Kulissen. Ich weiß nur, dass es funktioniert (immer gefährlich).

Mein Bauch sagt, BEISPIEL 4 ist der beste Weg; Sagen Sie ihm, welchen Typ es benötigt, und deklarieren Sie es zusammen mit dem Typ für die einfache Codierung und Fehlerprüfung. Ich bin mir sicher, dass es Gründe dafür gibt, es auf die eine oder andere Weise zu tun, je nachdem, was Sie tun wollen, aber hier könnten Sie wirklich eine Anleitung verwenden.

Ich sehe BEISPIEL 3 viel, aber das scheint überflüssig, eine Variable zweimal deklarieren.

Kann mir jemand erklären oder auf einen Artikel verweisen, der die Einzelheiten zu dem beschreibt, was ich hier versuchen möchte? Fast weiß nicht genau, was ich frage, Iykwim. Im Internet ist alles so fragmentiert. Tried CodingUnit, aber die Tutorials sind einfach nicht tief genug. TIA!

+2

'void main (void)' ist eine ungültige Signatur in gehosteten Umgebungen. 'main' soll ein' int'-Ergebnis liefern. – Olaf

+0

Ich habe wirklich gekämpft, wenn das "primär auf Meinung basiert", "zu breit" oder "nach externen Ressourcen gefragt" ist.Wie auch immer, es ist off-topic hier. – Olaf

+1

Es scheint, dass Sie richtige Kenntnisse benötigen. Mein Vorschlag ist, für die endgültige C-Bücher-Liste zu gehen. –

Antwort

0

Während in Vorwärtsdeklarationen müssen Sie nicht den Namen des Parameters angeben, nur Typ ist erforderlich (während Sie Namen angeben können). Dies muss jedoch nicht so sein wie bei der Definition der Funktion.

In Funciton Definition sagen void my_func(int i){..}, in diesem Funktionsparameter ist der Typ int und Variablenname ist i. Sie können auf seinen Wert über den Variablennamen i innerhalb des Funktionsblocks zugreifen.

Es gibt auch keine erneute Deklaration von Variablen, da diese auf den Funktionsblock beschränkt sind.

Es gibt im Grunde keinen Unterschied in diesen Methoden, es ist Konvention, wie Sie es verwenden.

0

Auch dies funktionieren würde:

void my_func(int); 

In Funktion Unterschriften den Namen es geht nicht um der Argumente, sondern um den Typen.

gibt es besondere Regeln für, wenn Sie eine externe Variable mit dem gleichen Namen wie eine mit den meisten lokalen Bereich

int idum1 = 1; 

void my_func(int idum1) 
{ 
    idum1++; 
} 

Hier die Variable

Parameter deklarieren wird erhöht, nicht die äußere.