gccの特定のフラグを渡す必要がある従来のコードがあります。これらのフラグのプリプロセッサチェックを追加できますか? (上の指定されたものを上書き必要なフラグがない場合、コンパイルが失敗する
#ifndef _FNO_STRICT_ALIASING
#error -fno-strict-aliasing is required!
#endif
gccの特定のフラグを渡す必要がある従来のコードがあります。これらのフラグのプリプロセッサチェックを追加できますか? (上の指定されたものを上書き必要なフラグがない場合、コンパイルが失敗する
#ifndef _FNO_STRICT_ALIASING
#error -fno-strict-aliasing is required!
#endif
あなたはそのフラグを持つファイルをコンパイルする
#pragma GCC optimize "no-strict-aliasing"
を使用することができます。
例えば、私はこのような何かを行うことができます、のは、私は-fno-strict-aliasing
を必要としましょうコマンドライン)。 あなたはまた、少なくともGCCの私のバージョンに、間違いなくそれについて何の#defineありません
...ソースファイル内の単一の関数にフラグを適用する
__attribute__((optimize("no-strict-aliasing")))
を使用することができます。
すべての定義済みプリプロセッサシンボルを参照するには、次の
g++ -dM -E - < /dev/null
私は、これらのオプションをテストするどのような方法があるとは思いません。ただし、GCC 4.4以降を使用している場合は、"optimize" function attributeまたは"optimize" #pragmaを使用して、機能ごとまたはファイルごとに特定のオプションを有効にすることができます。
#if defined(__GNUC__)
#pragma GCC optimize ("no-strict-aliasing")
#else
#error "You are not using GCC"
#endif
...それはヘッダを含むすべてのファイルのオプションを有効にする必要があります:あなたは、共通のヘッダファイルにこれを追加した場合たとえば
、。
[更新]
OK、それは私にこの答えを構成するには長すぎる約10分かかったそう。とにかくGCCのドキュメントへのリンクのためにここに残すつもりです。
ああ、no-strict-aliasingでプラグマを使うと動作しません:https://bugzilla.redhat.com/show_bug.cgi ?id = 486176 – paleozogt
make makeができるはずのような音がします。 –
@ Code Monkey:もちろん、フラグはmakeで渡すことができます。しかし、ソースコードが知識を失う可能性のある新しいmakeシステムに移動した場合(たとえば、ソースをlibに配布している場合など)。コード自体に必要なものが分かってほしいです。それはそんなに乾燥しています。 :) – paleozogt