Variable Parameter



  • Hallo, ich wollte mal hier nachfragen was mit meinem Code nicht stimmt (weshalb er nicht ausgefùhrt wird).
    Sourcecode:

    #include <stdio.h>
    #include <stdarg.h>
    
    void druck(int a, int b,...); // Prototyp
    
    int main(void) // Hauptfunktion
    {
    	druck(72627,3736283,2937384,82828);
    	return 0;   // Keine Fehler
    }
    
    void druck(int a, int b,...) // Original
    {
    va_list params;   // Argumente lesen
    int param;        // Argument übergebe
    va_start(params, b); // params initali(adresse)
    while(param != 0) // Ausgabe des Inhalts
    {
    param =va_arg(params, int);// überprüfen
    printf("%i\n", param); // Duck inhalt
    }
    va_end (params);
    }
    


  • Dieser Thread wurde von Moderator/in Arcoth aus dem Forum C++ (auch C++0x und C++11) in das Forum C (C89, C99 und C11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Was mir auffällt
    - param wird nicht initialisiert
    - druck bekommt keine 0 übergeben, welche das Ende der Parameterliste markiert



  • Nochmal formatiert:

    #include <stdio.h>
    #include <stdarg.h>
    
    void druck(int a, int b,...); // Prototyp
    
    int main(void) // Hauptfunktion
    {
    	druck(72627,3736283,2937384,82828);
    	return 0;   // Keine Fehler
    }
    
    void druck(int a, int b,...) // Original
    {
    	va_list params;   // Argumente lesen
    	int param;        // Argument übergebe
    	va_start(params, b); // params initali(adresse)
    	while(param != 0) // Ausgabe des Inhalts
    	{
    		param =va_arg(params, int);// überprüfen
    		printf("%i\n", param); // Duck inhalt
    	}
    	va_end (params);
    }
    

    param wird nirgends initialisiert und doch in der Abbruchbedingung verwendet; Clang gab mir eine entsprechende Warnung (das sollte dein Compiler, falls nicht Clang, auch können).
    Außerdem bricht die Schleife nur ab wenn eines der Argumente Null ist - was bei dir nicht der Fall ist.



  • Ich dachte das das letzte Argument immer den Wert 0 erhält...
    Wie auch immer 😃
    Dankeschön



  • LebeWieEinKönig schrieb:

    Ich dachte das das letzte Argument immer den Wert 0 erhält...

    0 kann ja auch ein gültiger Wert sein.


Anmelden zum Antworten