C und Prob (GCC Flags && typdef kompatibler Typen)
-
Hätt da paar Fragen zu C ...
kompatibler
wenn ich einen typedef habe:
typedef double neuer_typeund 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_typeund 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 gestztDer 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 gestztWenn du mit
-std=c99
unterwegs bist, dann geht sogar noch mehr:int i = /* Usereingabe oder sowas */; char a[i][7];