プロジェクトで実行ファイル(コンパイル日、バージョン、...)に関する情報を照会するために "what"がプロジェクトで使用されています。 gccのバージョンを変更したので、出力に1行がないバグを修正しました。文字列はローカルスコープで定義されています。オプティマイザとwhatコマンド専用の文字列とのやりとり
char string_for_what = "@(#) Component comp1";
この文字列は使用されていません。私は、オプティマイザがそれを削除したと仮定します。
通常の修正は、文字列をグローバルスコープで宣言することです。しかし、将来のコンパイラが使用されていない場合、それを最適化することを禁止しているのは何ですか?
文字列が使用されていることを確認するためにstrlen("@(#) Component comp1")
を呼び出すことを考えましたが、clangがこの呼び出しを定数文字列で最適化しているようです。
シャード私はfopen("@(#) Component comp1")
と電話しますか?誰かがこの名前のファイルを作成すると、1つのファイル記述子が失われる可能性があります。これはうまくいくようですが、ちょっと残酷すぎるようです。
可能性のある重複したすべての副作用あるんという関数を呼び出します16349557/gcc-have-any-options-to-add-version-info-in-elf-binary-file –