ページ 11

定数化のタイミング

Posted: 2007年10月29日(月) 15:49
by たまたま
早速ですが、
例えば、
#define A 20
#define B 100
#define C B/A

さて
func(C);
の中のCはコンパイル後、実行前にすでに5になっているのでしょうか、
または5にはまだならず、実行時に100/20をはじめて計算されるのでしょうか。

Re:定数化のタイミング

Posted: 2007年10月29日(月) 15:52
by しりうす~
「プリプロセス」ってキーワードで調べると幸せになれそうな予感がします。

Re:定数化のタイミング

Posted: 2007年10月30日(火) 10:19
by keichan
大抵のコンパイラは定数値同士の算術演算は計算しちゃうと思います。

Re:定数化のタイミング

Posted: 2007年10月30日(火) 10:19
by TT414
コンパイラによって違います。

Cプリプロセッサがdefineを処理した後の、Cコンパイラの入力は「func(100/20);」ですが、
コンパイラの最適化の設定により、「実行時に100/20をはじめて計算」または、
「実行前にすでに5」のどちらかになります。

もっとも「実行時に100/20をはじめて計算」になるのは、
1古い
2コンパイラの最適化のレベルが低い
3教育用コンパイラで最適化を一切しない。(教育用はコンパイラの作り方の方です)

程度しか、無いと思いますが、無くはないので。

Re:定数化のタイミング

Posted: 2007年10月30日(火) 13:55
by たまたま
TT414様
ご解説よくわかりました。
有難う御座います。

keichan様
有難う御座います。


しりうす~さま
>「プリプロセス」ってキーワードで調べると幸せになれそうな予感がします。
上の方々からのご指導もあって、そしてしりうす~さまのご返答自体からも
「プリプロセス」ってキーワードで調べなくても幸せになれるように予感がします。

Re:定数化のタイミング(お礼)

Posted: 2007年10月30日(火) 13:56
by たまたま
解決のお礼