C/C++の宿題をやらせろや!!!
■ このスレッドは過去ログ倉庫に格納されています
0366デフォルトの名無しさん
NGNG>>359 の言うような最適化をするかどうかは知らんけど...
> absがグローバル変数を触らないってことが,どうしてコンパイラにわかる?
わかる (と言うか教えている) 処理系あるよ。
例えば、VC++ 6.0 だと...
/Oi オプションを指定すると、次の関数が組み込み (インライン) 形式に置き換えられます。
_disable(), _outp(), abs(), memset(), _enable(), _outpw(), fabs(), strcat(), _inp(), _rotl(), labs(), strcmp(), _inpw(), _rotr(), memcp(), strcpy(), _lrotl(), _strset(), memcpy(), strlen(), _lrotr()
となってる。当然コンパイラは、関数の挙動は知ってるわけ。
また、GCC なんかでは拡張機能で、
int abs(int) __attribute__ ((const));
と宣言しておけば、abs() の引数が同じなら、返り値が変わらないことをコンパイラに教えることができる。
> 煽りじゃなく無知ゆえの疑問です。
そう言う疑問を持つことはいいことだ。
>>361
普通に、return a >= 0 ? a : -a; の方が早いと思うぞ。
また、>>361 は環境に依存してるしね。
■ このスレッドは過去ログ倉庫に格納されています