2012年4月20日金曜日

開発環境

『実践プログラミング 第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 コメント:

コメントを投稿