Der Befehl "what" wird in meinem Projekt verwendet, um einige Informationen über ausführbare Dateien abzufragen (Kompilierungsdatum, Version, ...). Ich behebe einen Fehler, bei dem eine Zeile in der Ausgabe fehlt, da wir die Version von gcc geändert haben. Die Zeichenfolge wurde in einem lokalen Bereich definiert:Interaktion zwischen dem Optimierer und Zeichenketten für den Befehl which
char string_for_what = "@(#) Component comp1";
Diese Zeichenfolge wurde nie verwendet. Ich nehme an, der Optimierer hat es entfernt.
Ich denke, die normale Korrektur sollte sein, die Zeichenfolge in einem globalen Geltungsbereich zu deklarieren. Aber was verbietet einem zukünftigen Compiler, es zu optimieren, wenn es nicht verwendet wird?
Ich habe über strlen("@(#) Component comp1")
strlen("@(#) Component comp1")
gedacht, um sicherzustellen, dass die Zeichenfolge verwendet wird, aber es scheint, dass clang diesen Aufruf auf konstanten Zeichenfolgen optimiert.
Shoud ich rufe fopen("@(#) Component comp1")
? Wenn jemand eine Datei mit diesem Namen erstellt, kann ich einen Dateideskriptor verlieren. Das scheint zu funktionieren, aber es scheint auch ein bisschen übertrieben zu sein.
Mögliche Duplikat http://stackoverflow.com/questions/ 16349557/does-gcc-have-any-options-zu-add-version-info-in-elf-binary-datei –