このようなCまたはC++のコードがある場合:関数が任意の副作用を持っているかどうかを確認することができない場合可能な副作用を伴ってコンパイラが最適化機能を呼び出すことができますか?
if (func())
;
func()
を関数の呼び出しを最適化コンパイラができますか?原産地私の質問の
:私は時々このような方法でマクロを主張呼び出す:
if (func())
assert(0);
私はfunc()
が常にをが呼び出されることを確認すると、そのasssertionをデバッグモードで失敗した場合func()
戻り場合間違った値。しかし、最近私のコードは、関数が常に呼び出されることを保証していないと警告されました。
'func'の定義を投稿できますか? –
なぜ 'assert(!func())'または ' retval = func(); assert(!retval); '? –
cxw
これは副作用を伴うことがある一般的な機能です。私はこれを特定の機能について議論したくありません。関数が同じファイルに実装されていないと仮定しましょう。コンパイラはその内部に何か情報を持っていません。 – faramir