C und Prob (GCC Flags && typdef kompatibler Typen)



  • Hätt da paar Fragen zu C ...
    kompatibler
    wenn ich einen typedef habe:
    typedef double neuer_type

    und ich habe Unterfunktionen die "neuer_type" verwenden kann es zu Problemen kommen,
    wenn ich die beim Aufrufen mit double deklarierte Variablen übergebe??

    Aja, gibts Flags für den gcc das der mir beim C kompilieren genauere Fehler ausgibt ?
    und vl auch ein Flag für "genauere" Prüfung (mehr warnings und so) ?

    gibt es eine einfache Möglichkeit mehrdimensionale Arrays mit 0 (Null) zu initialisieren ?
    bei eindimensionalen kan man ja "={0};"



  • Jako schrieb:

    wenn ich einen typedef habe:
    typedef double neuer_type

    und ich habe Unterfunktionen die "neuer_type" verwenden kann es zu Problemen kommen,
    wenn ich die beim Aufrufen mit double deklarierte Variablen übergebe??

    Nein

    Jako schrieb:

    Aja, gibts Flags für den gcc das der mir beim C kompilieren genauere Fehler ausgibt ?
    und vl auch ein Flag für "genauere" Prüfung (mehr warnings und so) ?

    -Wall -Wextra -pedantic-errors -std=c99

    Jako schrieb:

    gibt es eine einfache Möglichkeit mehrdimensionale Arrays mit 0 (Null) zu initialisieren ?
    bei eindimensionalen kan man ja "={0};"

    char a[2][1] = { {0}, {0} };
    


  • und ich habe Unterfunktionen die "neuer_type" verwenden kann es zu Problemen kommen,
    wenn ich die beim Aufrufen mit double deklarierte Variablen übergebe??

    Nicht solange du die Typ-Definition nicht änderst.

    Aja, gibts Flags für den gcc das der mir beim C kompilieren genauere Fehler ausgibt ?
    und vl auch ein Flag für "genauere" Prüfung (mehr warnings und so) ?

    gcc -std=c99 -Wextra -Wall -pedantic
    

    gibt es eine einfache Möglichkeit mehrdimensionale Arrays mit 0 (Null) zu initialisieren ?

    Mehrdimensionale Arrays sind auch nur ein Speicherbereich.
    AFAIK kann man die initialisieren als wären sie eindimensional.
    Im Zweifel gibt's man: memset.



  • danke, Flags muss ich mal ausprobieren.

    rüdiger schrieb:

    char a[2][1] = { {0}, {0} };
    

    was is wenn die Dimmension selber vorher nicht weiß, sprioch eine Dimension wird durch eine
    Preprozessor konstante gestzt

    #define MAX_G	125
    long array[MAX_G][10] = { {0}, {0} };
    

    geht das auch ?

    µngbd schrieb:

    Mehrdimensionale Arrays sind auch nur ein Speicherbereich.
    AFAIK kann man die initialisieren als wären sie eindimensional.
    Im Zweifel gibt's man: memset.

    Hmm kenn ich noch nicht,
    werd ich mir wohl mal ansehen müssen



  • Jako schrieb:

    was is wenn die Dimmension selber vorher nicht weiß, sprioch eine Dimension wird durch eine
    Preprozessor konstante gestzt

    Der Präprozessor läuft als allererstes über deinen Code. Deshalb kann der eigentliche Compiler den Unterschied nicht erkennen, weil der Text vorher ersetzt wird.

    Mit dem gcc kannst du beobachten, wie Makros expandiert werden mit:

    gcc -E foo.c
    

    Das gibt die Ausgabe des Präprozessors aus.

    ich schrieb:

    Mehrdimensionale Arrays sind auch nur ein Speicherbereich.
    AFAIK kann man die initialisieren als wären sie eindimensional.

    Bin mir aber nicht so sicher, zB warnt der gcc folgendes an:

    #include <stdio.h>
    
    int main(void)
    {
        char a[2][2] = {0};
        int i, j;
    
        for (i = 0; i < 2; i++)
            for (j = 0; j < 2; j++)
                printf("a[%d][%d] = %d\n", i, j, a[i][j]);
    
        return 0;
    }
    
    main.c: In function `main':
    main.c:5: warning: missing braces around initializer
    main.c:5: warning: (near initialization for `a[0]')
    

    Aber dann werden alle vier als Null ausgegeben.

    rüdiger schrieb:

    -Wall -Wextra -pedantic-errors -std=c99

    Der Kanon des GNU-Users... 🙄



  • Ach ja, Nachtrag:

    Jako schrieb:

    was is wenn die Dimmension selber vorher nicht weiß, sprioch eine Dimension wird durch eine
    Preprozessor konstante gestzt

    Wenn du mit -std=c99 unterwegs bist, dann geht sogar noch mehr:

    int i = /* Usereingabe oder sowas */;
    char a[i][7];
    

Anmelden zum Antworten