[C/C++] Kompilieren unter Ubuntu

Und es steht irgendwo, dass 0 NULL ist.
In dieser Aussage steckt soviel Unwissen drin. Ich weiß gar nicht wo ich anfangen soll...

C / C++ sind typisierte Sprachen - aus gutem Grund.

NULL ist ((void*)0).

Das ist etwas ganz anderes als int 0.

Mal abgesehen davon, das du überhaupt nicht weißt wie ein Nullzeiger im Speicher repräsentiert wird.

Lassen wir das.

---

Ich werde es wohl nicht mehr nachvollziehen können wie man so dreist sein kann, einfach alle Warnungen zu ignorieren, zu behaupten das Programm wäre fehlerfrei und trotzdem funktioniert irgendwas nicht... :eek:

Bei dieser Menge an Warnungen - oder wenn man einfach alle Warnungen ausstellt - sieht man natürlich auch nicht die eine schwerwiegende Warnung, die darin versteckt ist...

Gruß
 
Gut. Ich habe unter Windows mit Visual C++ Projekte mit strcmp("","") == NULL kompiliert. Unter Windows mit MinGW. Mit allem möglichen. Die Warnungen sind nie ernst zu nehmend gewesen. Alles funktioniert. Nur unter Linux geht das nicht. Das lässt durchaus den Schluss zu, dass der Code an sich nicht unbedingt fehlerfrei, wohl aber funktionsfähig ist. Meine Frage ist: Weshalb geht das unter Linux nicht?
Ich werde mal die NULLs durch 0s ersetzen, sobald ich wieder beim Computer bin.

cwriter
 
Zuletzt bearbeitet:
Ok, wieder da.
Alle NULLs durch 0s ersetzt, schon mal weniger Warnungen. Gut. Welche Warnung meintest du mit Schwerwiegend? Ich habe jetzt noch einige mit
Code:
Warnung: Format ist kein Zeichenkettenliteral, und keine Formatargumente [-Wformat-security]
und
Code:
Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings]
und noch den hier:
Code:
Warnung: Adresse der lokalen Variable »path« zurückgegeben [standardmäßig aktiviert]

Ich nehme jetzt einfach mal an, dass du Letzteren meintest.
Möglicherweise eine Frage, die gleich einige Flames auslösen wird:
Was ist da der Fehler bzw. weshalb soll das nicht gut sein?


Und sorry wegen dem NULL = 0, aber ich habe irgendwo mal gelesen, das es (in der stdio.h?) einen #define NULL 0 hat. Naja, Entschuldigung.

Und noch eine Frage dazu: Weshalb geht es denn, wenn ich einem Pointer ein 0 gebe (char* Funktion(){ return 0;})?
cwriter
 
Zuletzt bearbeitet:
Und noch eine Frage dazu: Weshalb geht es denn, wenn ich einem Pointer ein 0 gebe (char* Funktion(){ return 0;})?
cwriter

In dem Fall gibst du den Null-Pointer zurück. Was deepthroat meinte ist das strcmp einen Integer zurück gibt. Ein Int kann den Wert 0 annehmen, aber ein Zeiger kann nur auf 0 zeigen. Das ist wie, wenn du einem bool eine 1 gibst und es intern als true behandelt wird.
 
Zu stdio und NULL:
Warum schaust du nicht einfach nach?

Zu der Adresse von lokalen Variablen:
Wenn man in einer Funktion eine Variable macht (die kein Pointer ist bzw.
mit malloc/new angelegt wird, sondern einfach eine ganz normale Variable)
wird die automatsch am Funktionsende wieder entfernt.

Für den Returnwert wird also die Adresse genommen,
dann wird die Variable gelöscht,
dann gehts in main etc. weiter.

Und das greift dann mit der Adresse auf einem Speicherbereich zu,
in dem schon wieder was ganz anderes steht/stehen kann
(es kann zufällig auch gehen, wenn noch nichts überschrieben wurde.
Trotzdem nicht toll, weil man sich darauf nicht verlassen kann).
 
Wenn man in einer Funktion eine Variable macht (die kein Pointer ist bzw.
mit malloc/new angelegt wird, sondern einfach eine ganz normale Variable)
Und wenn nicht? Müsste man den Pointer dann ausserhalb der Funktion "befreien"?

cwriter

/EDIT
So. Zusätzlichen char* reingeschrieben -> keine Warnung mehr. Der letzte Typ:
Code:
Warnung: Format ist kein Zeichenkettenliteral, und keine Formatargumente [-Wformat-security]
Ist das eine wichtige Warnung?
 
Zuletzt bearbeitet:
Genau.
malloc/new-Zeug wird am Funktionsende nicht entfernt,
muss dann aber irgendwann selbst mit free/delete gelöscht werden.

Wirklich schön wäre das aber nicht.
Wenn schon, dann im main anlegen, per Parameter übergeben,
und dann nach Gebrauch auh wieder im main freigeben.
Da freigeben, wo es auch angelegt wurde.
 
Zurück