2014年2月22日土曜日

開発環境

C++実践プログラミング (スティーブ オウアルライン (著)、Steve Oualline (原著)、Steve Oualline(原著)、望月 康司(翻訳)、クイープ(翻訳) 、オライリー・ジャパン)のⅡ部(シンプルなプログラミング)の10章(C++ プリプロセッサ)、10.4(パラメータをとるマクロ)、設問 10-5を解いてみる。

その他参考書籍

設問 10-5

問題のコードの出力結果。

$ make && ./sample
g++ -g -Wall -o sample sample.cpp
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
$

意図と違う出力結果が得られる理由は

SQR(counter+1)
counter + 1 * counter + 1
と展開されるから。

修正。

コード(BBEdit, Emacs)

sample.cpp

#include <iostream>

/* パラメータを括弧で囲む */
#define SQR(x) ((x) * (x))

int main()
{
    int counter;
    
    for (counter = 0; counter < 5; ++counter) {
        std::cout << "x " << (counter + 1) << " x squared " <<
                SQR(counter+1) << '\n';
    }
    return (0);
}

Makefile

#
# FSFのg++コンパイラ用のMakefile
#
CC=g++
CFLAGS=-g -Wall
all: sample

sample: sample.cpp
 $(CC) $(CFLAGS) -o sample sample.cpp

clean:
 rm sample

入出力結果(Terminal)

$ make && ./sample
g++ -g -Wall -o sample sample.cpp
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 コメント:

コメントを投稿