C-Code und g++
-
- BASIC-Programmierer
- Beiträge: 107
- Registriert: 8. Okt 2010 20:31
C-Code und g++
Hi
Aus welchem Grund soll der "C-Code" mit dem g++ compiliert werden?
Hab das irgendwie nicht mitbekommen.
Ich muss jetzt so komische sachen machen wie malloc casten
Aus welchem Grund soll der "C-Code" mit dem g++ compiliert werden?
Hab das irgendwie nicht mitbekommen.
Ich muss jetzt so komische sachen machen wie malloc casten
Re: C-Code und g++
Der Hintergrund war zum einen, dass sich der Aufruf nicht nochmal aendert, wenn wir auf C++ wechseln. Ausserdem ist C seit dem neuen Standard C++11 wieder quasi eine echte Teilmenge von C++.
g++ ist einfach weniger restriktiv, was manche syntaktischen Elemente angeht. Z.B. muesste man in C streng genommen in Header-Dateien Funktionsdeklarationen als extern markieren, wenn man sie auch in anderen .c-Dateien zugaenglich machen moechte. Und ich weiss nicht, was gcc mit initializer lists (z.B. float mat[3][4] = {{-886.8, 0.0, -512.0, 0.0}, {0.0, 886.8, -512.0, 0.0}, {0.0, 0.0, -1.0, 0.0}};) macht.
Ich glaube der aktuelle C-Standard unterstuetzt das auch. Der default von gcc ist -std=gnu89. Man koennte den aktuellen Standard auch mit gcc -std=c99 aktivieren. Aber die einfachere Variante war es g++ zu benutzen.
g++ ist einfach weniger restriktiv, was manche syntaktischen Elemente angeht. Z.B. muesste man in C streng genommen in Header-Dateien Funktionsdeklarationen als extern markieren, wenn man sie auch in anderen .c-Dateien zugaenglich machen moechte. Und ich weiss nicht, was gcc mit initializer lists (z.B. float mat[3][4] = {{-886.8, 0.0, -512.0, 0.0}, {0.0, 886.8, -512.0, 0.0}, {0.0, 0.0, -1.0, 0.0}};) macht.
Ich glaube der aktuelle C-Standard unterstuetzt das auch. Der default von gcc ist -std=gnu89. Man koennte den aktuellen Standard auch mit gcc -std=c99 aktivieren. Aber die einfachere Variante war es g++ zu benutzen.
-
- BASIC-Programmierer
- Beiträge: 107
- Registriert: 8. Okt 2010 20:31
Re: C-Code und g++
Dankeschön für die ausführliche Erklärung, ich hoffe es weiß dann auch jeder, dass er c++ und nicht c programmiert.
(Wegen der Sache mit malloc z.B., da ist ein ganz anderes Konzept dahinter als in c++, die Hausaufgabe H4/2 ist auch nicht so lösbar wie eigentlich gedacht...)
Wegen deinem Problem mit den "extern funktionsdeklarationen", vielleicht hilft es da den gcc sensibler zu schalten, das geht mit "-Wall" und noch einem parameter, den ich gerade leider nicht mehr im Kopf habe.
float mat[3][4] = {{-886.8, 0.0, -512.0, 0.0}, {0.0, 886.8, -512.0, 0.0}, {0.0, 0.0, -1.0, 0.0}}; sollte ohne probleme funktionieren
(Wegen der Sache mit malloc z.B., da ist ein ganz anderes Konzept dahinter als in c++, die Hausaufgabe H4/2 ist auch nicht so lösbar wie eigentlich gedacht...)
Wegen deinem Problem mit den "extern funktionsdeklarationen", vielleicht hilft es da den gcc sensibler zu schalten, das geht mit "-Wall" und noch einem parameter, den ich gerade leider nicht mehr im Kopf habe.
float mat[3][4] = {{-886.8, 0.0, -512.0, 0.0}, {0.0, 886.8, -512.0, 0.0}, {0.0, 0.0, -1.0, 0.0}}; sollte ohne probleme funktionieren
-
- Endlosschleifenbastler
- Beiträge: 172
- Registriert: 6. Okt 2011 15:25
Re: C-Code und g++
Hai
Funktioniert nicht mit gcc
Wo brauchst du malloc bei H4/2 ?
Code: Alles auswählen
for(int i = 0; i < 3; i++)
Darum g++ um sich das Leben nicht unnötig schwer zu machen.error: 'for' loop initial declaration used outside C99 mode
Wo brauchst du malloc bei H4/2 ?

-
- BASIC-Programmierer
- Beiträge: 107
- Registriert: 8. Okt 2010 20:31
Re: C-Code und g++
HiThomas Huxhorn hat geschrieben:HaiFunktioniert nicht mit gccCode: Alles auswählen
for(int i = 0; i < 3; i++)
Darum g++ um sich das Leben nicht unnötig schwer zu machen.error: 'for' loop initial declaration used outside C99 mode
Wo brauchst du malloc bei H4/2 ?
for(int i = 0; i < 3; i++) geht in c99
malloc war nicht auf H4/2 bezogen
in H4/2 geht es um call by value, call by reference und noch irgendwas
z.b. das hier ist c++ und nicht c, wird in der aufgabe aber wohl verlangt:
Code: Alles auswählen
int increment(int& n) {...}
-
- Endlosschleifenbastler
- Beiträge: 172
- Registriert: 6. Okt 2011 15:25
Re: C-Code und g++
Ja. Man muss dem gcc eben sagt, er soll c99 nutzen. Sonst gehts nicht.
Also ist call by reference garnicht C sonst nur C++ ? Wieder was gelernt
Also ist call by reference garnicht C sonst nur C++ ? Wieder was gelernt

Re: C-Code und g++
Ah, stimmt. Ich erinner mich wieder. Es ist schon 2 Wochen her, dass ich Uebung 4 entworfen hatte ^^
Ja, for(int i=...) wird mit gcc -std=c99 akzeptiert. Aber wie gesagt, die einfachste Variante ist einfach nur g++ zu benutzen.
Dass man bei der Benutzung von Referenzen kein C benutzt, steht sogar in der Fussnote auf Seite 5 der Aufgabenstellung.
Es kann sein, dass ich mich da zu weit aus dem Fenster lehne, aber ich glaube in den meisten Anwendungen ist die Unterscheidung ob ich reines C benutze oder mich einiger Annehmlichkeiten aus C++ bediene auch nicht so wichtig, oder? Wenn man eingebettete Systeme programmiert spielt es wahrscheinlich eine Rolle. Ansonsten aber meistens nicht.
Ja, for(int i=...) wird mit gcc -std=c99 akzeptiert. Aber wie gesagt, die einfachste Variante ist einfach nur g++ zu benutzen.
Dass man bei der Benutzung von Referenzen kein C benutzt, steht sogar in der Fussnote auf Seite 5 der Aufgabenstellung.
Es kann sein, dass ich mich da zu weit aus dem Fenster lehne, aber ich glaube in den meisten Anwendungen ist die Unterscheidung ob ich reines C benutze oder mich einiger Annehmlichkeiten aus C++ bediene auch nicht so wichtig, oder? Wenn man eingebettete Systeme programmiert spielt es wahrscheinlich eine Rolle. Ansonsten aber meistens nicht.
-
- BASIC-Programmierer
- Beiträge: 107
- Registriert: 8. Okt 2010 20:31
Re: C-Code und g++
Ja stimmt. Und außerhalb wird C ja auch kaum benutzt.mw1039 hat geschrieben:Es kann sein, dass ich mich da zu weit aus dem Fenster lehne, aber ich glaube in den meisten Anwendungen ist die Unterscheidung ob ich reines C benutze oder mich einiger Annehmlichkeiten aus C++ bediene auch nicht so wichtig, oder? Wenn man eingebettete Systeme programmiert spielt es wahrscheinlich eine Rolle. Ansonsten aber meistens nicht.
Danke für die Klarstellungen.