開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの無料、light版)
- 言語: C
- コンパイラ: UNIX ccコンパイラ (汎用UNIX)
『実践プログラミング 第3版』 (Steve Oualline (著)、 望月 康司 (監修) (翻訳)、 谷口 功 (翻訳)、 オライリー・ジャパン、1998年、ISBN978-4900900646) の10章(Cプリプロセッサ)10.4(パラメータをとるマクロ)設問10-5を解いてみる。
設問10-5.
パラメータが括弧囲まれていないので、(counter + 1) * (counter + 1)のつもりが、counter + 1 * counter + 1となってしまい、意図したものと演算の優先順位が変わったしまう。
修正。
コード(TextWrangler)
#include <stdio.h>
#define SQR(x) ((x) * (x))
int main(){
int counter;
for(counter = 0 ; counter < 5 ; ++counter){
printf("x %d, x squared %d\n",
counter + 1, SQR(counter + 1));
}
return (0);
}
入出力結果(Terminal)
$ cc -g -o sample sample.c
$ ./sample
x 1, x squared 1
x 2, x squared 3
x 3, x squared 5
x 4, x squared 7
x 5, x squared 9
$ cc -E sample.c
/ ***削除***/
int main(){
int counter;
for(counter = 0 ; counter < 5 ; ++counter){
printf("x %d, x squared %d\n",
counter + 1, (counter + 1 * counter + 1));
}
return (0);
}
$ cc -g -o sample sample.c
$ ./sample
x 1, x squared 1
x 2, x squared 4
x 3, x squared 9
x 4, x squared 16
x 5, x squared 25
$
0 コメント:
コメントを投稿