DXライブラリを使ったプログラムを製作中なのですが
定数項について質問があります
極端な例ですが
DATA( 1+(2+4)*((((((4+5))))))-5 );
のように、関数を呼び出した時に定数項だけで引数を渡した場合
コンパイル時に
DATA(50);
のように1つの数値にまとめられていたりするのでしょうか?
まとめられていれば良いのですが
そうでない場合はできるだけ余計な計算が引数に入らないように気を付けないと
関数を呼び出すたびに無駄な処理が行われてしまうので
コンパイル時にどうなっているのか教えてください
コンパイル時の定数項?
Re:コンパイル時の定数項?
式を評価した値を関数の引数として値渡ししているので、
実行前の段階に50という数字は出てないと思います。
>関数を呼び出すたびに無駄な処理が行われてしまうので
代入した値を引数として用いれば解決できるはずです。
#また知識不足の発言でした・・・
実行前の段階に50という数字は出てないと思います。
>関数を呼び出すたびに無駄な処理が行われてしまうので
代入した値を引数として用いれば解決できるはずです。
#また知識不足の発言でした・・・
Re:コンパイル時の定数項?
コンパイラによるのか規格で保証されているのか知りませんが、
普通のコンパイラならまとめるでしょう。
例えばVC2008では、次のように確認できます。
ここでは掲示板のマナー云々の話はしませんが、問題を1つ1つ解決しようという
集中力に欠けているような印象を受けます。
同時に多くの問題をかかえ、多くのスレを立てることで、
1つ1つの回答者の指摘を消化できていないようです。
誰が一番損していると思いますか?
普通のコンパイラならまとめるでしょう。
例えばVC2008では、次のように確認できます。
int main() { 00411500 push ebp 00411501 mov ebp,esp 00411503 sub esp,0CCh 00411509 push ebx 0041150A push esi 0041150B push edi 0041150C lea edi,[ebp-0CCh] 00411512 mov ecx,33h 00411517 mov eax,0CCCCCCCCh 0041151C rep stos dword ptr es:[edi] int v = Data(1+(2+4)*((((((4+5))))))-5); 0041151E push 32h 00411520 call Data (4111B8h) 00411525 add esp,4 00411528 mov dword ptr [v],eax cout << v << endl; 0041152B mov esi,esp ...他のスレでも指摘している人がいましたが、質問を乱発しすぎだと思います。
ここでは掲示板のマナー云々の話はしませんが、問題を1つ1つ解決しようという
集中力に欠けているような印象を受けます。
同時に多くの問題をかかえ、多くのスレを立てることで、
1つ1つの回答者の指摘を消化できていないようです。
誰が一番損していると思いますか?
Re:コンパイル時の定数項?
なるほど、やはり計算されているんですか
>>他のスレでも指摘している人がいましたが、質問を乱発しすぎだと思います
すいません、当面の問題は全部解決したのでしばらく大人しくしています
どうもありがとうございました
>>他のスレでも指摘している人がいましたが、質問を乱発しすぎだと思います
すいません、当面の問題は全部解決したのでしばらく大人しくしています
どうもありがとうございました
Re:コンパイル時の定数項?
コンパイラによってはmath関数の結果もコンパイル前に計算されたりします
例えば平方根を求める
sqrt(2.0)
も関数呼び出しではなく1.414...に置き換えられる場合があります
例えば平方根を求める
sqrt(2.0)
も関数呼び出しではなく1.414...に置き換えられる場合があります
Re:コンパイル時の定数項?
sqrtをコンパイル時に計算してしまうのは、組み込み関数による最適化ですね。
文法上は定数式にならないので、やや扱いが異なります。
ちなみに、私は最近変な実験を行っていて...
# 遊びの範疇を超えませんが...
テンプレートでは浮動小数点数を扱えませんが、PHPなら簡単に埋め込めるので期待しています。
あるいは、整列済みの配列や木構造を静的に作れるのも魅力です。
文法上は定数式にならないので、やや扱いが異なります。
ちなみに、私は最近変な実験を行っていて...
const double SQRT2 = <?php echo sqrt(2.0); ?>;のように、PHPを前処理に使って静的にできることを増やす検討をしています。
# 遊びの範疇を超えませんが...
テンプレートでは浮動小数点数を扱えませんが、PHPなら簡単に埋め込めるので期待しています。
あるいは、整列済みの配列や木構造を静的に作れるのも魅力です。