コンパイル時の定数項 その2

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
チルチル

コンパイル時の定数項 その2

#1

投稿記事 by チルチル » 16年前

前回の質問で

DATA( 1+(2+4)*((((((4+5))))))-5 );

はコンパイル時に

DATA( 50 );

になると知ったんですが

定数項以外の要素がある式でも、ある程度統合してくれるのでしょうか?

例えば

DATA( 5+3+i );



DATA( 8+i );

見たいな感じで・・

マクロとかを入れても大丈夫でしょうか・・

#define P 9

DATA( 8+P+i );



DATA( 17+i );

みたいに・・

このような事が可能だとしたら

順番は関係あるのでしょうか?

DATA( 2+i+8 );



DATA( 10+i );

とか・・

順番によって変わってくるとしたら

定数項を一纏めにしておいた方が良いって事になりますね・・

あと定数項の式が0になる場合はどうなるんでしょうか?

DATA( 1-1+i );



DATA( 0+i );



DATA( i );

のどっちになるのでしょうか?

質問が長くなってすいません・・

b

Re:コンパイル時の定数項 その2

#2

投稿記事 by b » 16年前

少しは自分で調べてみましょう。

御津凪

Re:コンパイル時の定数項 その2

#3

投稿記事 by 御津凪 » 16年前

最近のコンパイラは頭がいいので、最適化できる定数項、マクロは全て最適化できます。

最適化なので、意味のない文も削除されます。

なので、
DATA( 1-1+i );
は、
DATA( i );
になります。

また、
{
    int i = 0;
    i = 1;
    i = 2;
}
は、最適化により {} で囲まれた部分丸ごと省かれます。
(もちろんコンパイラの能力によりますが)

御津凪

Re:コンパイル時の定数項 その2

#4

投稿記事 by 御津凪 » 16年前

最適化できる細かい内容は Wikipedia の コンパイラ最適化 に書かれています。

ねこ

Re:コンパイル時の定数項 その2

#5

投稿記事 by ねこ » 16年前

とりあえずですね、本題とは関係ないんですがチルチルさんの気にされている事は

車で進んでる道に蟻が居ないかチェックしながら進む、みたいな事です。

仮に2GHzのCPUで処理していたとして、演算処理なんて数十クロックです。
0.000○ミリ秒の誤差を気にしてる事になります。
物凄い複雑な3D計算でもしない限りCPUによる処理落ちなんてしませんし
そんな事気にするくらいならより良いアルゴリズムを考えた方が100倍マシです。

チルチル

Re:コンパイル時の定数項 その2

#6

投稿記事 by チルチル » 16年前

う~ん最近のコンパイラは高性能ですね・・

よく考えたら確かに気にするほどの事では無かったですね・・

どうもお騒がせしました。

たかぎ

Re:コンパイル時の定数項 その2

#7

投稿記事 by たかぎ » 16年前

定数式かどうかについては効率以外の問題もあるので、きちんと理解していることは無意味ではありません。
それに対して、定数式ではなく、式に変数等が混在する場合は、コンパイル結果の確認を行うときなどを除けば、まず気にすることは無いでしょう。

ちなみに、定数式かどうかについては、列挙子の値、caseラベル、配列の要素数、テンプレート実引数等に使えるかどうかに関わってきます。

閉鎖

“C言語何でも質問掲示板” へ戻る