Grundsatzdiskussionen zu C
-
Wir haben das jetzt per Compiler- und Linker-Schalter abgesichert:
GCCFLAGS= -fno-common LDFLAGS= --warn-common
Damit befindet sich in kernel.map nun alles in bss.
COMMON sieht nun so aus:
*(COMMON) 0x000796c4 __kernel_end = . 0x000796c4 __end = .
Volkard Henkel ist übrigens bekannt duch sein hervorragendes und wirklich lesenwertes C++-Tutorial: http://www2.fh-augsburg.de/informatik/vorlesungen/XX/c_cplus/tutorial/henkel/
-
Erhard Henkes schrieb:
Interessanterweise würde gcc/ld das bei der aktuellen Einstellung problemlos "schlucken". Dies ist offenbar ein "Feature" von gcc/ld...
Welche Version von gcc macht so was? Was geben "gcc --version" und "ld --version" aus?
-
gcc Version 4.4.0
ld Version 2.19.1
-
Das ist überhaupt kein "Feature" von gcc oder ld. Man kann sich mit dem cpp (C-Präprozessor) den Code anschauen, so wie gcc den Code sieht... Header Dateien werden ja in den Quellcode "eingefügt", genauso wie Defines und Makros im Quellcode ersetzt werden...
-
Es gibt da noch ein Thema:
return; aus Funktionen vom Ergebnis-Typ void. MrX ist dafür, ich eher dagegen, weil mir ein return ohne Value nicht geheuer vorkommt. GCC schluckt. Kann man das auch mittels Schalter verbieten?
-
einfaches return; muss meines Erachtens jeder Compiler schlucken.
-
Jo, das ist ganz normales und korrektes C.
-
Es gibt ein Tool, um den Quellcode auf sauberes C zu prüfen, wie ich hier http://www.c-plusplus.net/forum/viewtopic-var-t-is-252326-and-start-is-60.html schon mal gepostet habe (das mit splint)...
-
Das prüft auch nur im Rahmen dessen, was die Macher von Splint für sauber halten
-
Mr X schrieb:
Das prüft auch nur im Rahmen dessen, was die Macher von Splint für sauber halten
Das ist nur ein Hilfswerkzeug. Der Compiler überprüft ja schon einiges und man kann splint zur Kontrolle benutzen, rein informativ. z.B. oder einfach nur "zur Kenntnisnahme".
Einfach mal drüberlaufen lassen und sich über die Tausende Warnungen wundern
-
Tausende Warnungen
Wer benötigt denn so etwas?
-
Erhard Henkes schrieb:
Tausende Warnungen
Wer benötigt denn so etwas?
Wer sichergehen möchte, dass der "Ring 0" Code "sauber" ist
-
weil mir ein return ohne Value nicht geheuer vorkommt
Tolle Begruendung ... ein einfaches return bei Funktionen ohne Rueckgabewert ist legitim. Bei Funktionen mit Rueckgabewert hat man halt
return "value"
und wenn nur eine void-Funktion, der Rueckgabewert also gestrichen ist, so kann auch der Rueckgabewert bei return gestrichen werden. Es ist ein bequemes Mittel eine Funktion vorzeitig zu verlassen, genau wie bei Funktionen mit Wertrueckgabe.
-
ein einfaches return bei Funktionen ohne Rueckgabewert ist legitim
ja, das ist richtig.
-
Wir haben uns ja inzwischen auch im IRC geeinigt, einfaches return als legitim anzusehen. Daher ist dieser "Streitpunkt" auch geklärt (Zum Glück mit dem Ergebnis "Pro-Return")