それC++なら#defineじゃなくてもできるよ

この記事は 初心者 C++er Advent Calendar 2015 18日目の記事です.
17日目の記事は@yumetodoさんで C99からC++14を駆け抜けるC++講座でした.

はじめましての人ははじめまして, とさいぬです.
自称情報系の電気科学生をやっています.

C++歴は2年くらいで, Twitterで知り合ったC#erやRubyistのマネをしようとTwitterライブラリを書いたり, 最近は某所でプログラムを書きながら新しく入ったメンバーにC++を教えたりもしています.

もう汚いマクロは見たくないんだ

今年は何かと マクロ に苦しめられた年でした.

C言語の入門書や学校のC言語の授業では, #define定数を定義するための構文 として細かな説明もなく使われだしたりします.
故に, 今年から参加することになった某所のソフトでは, こんなコードや

void yabai_func1() {
#define N 10
  for (int i = 0; i < N; i++) {
    /* */
  }
}

void yabai_func2() {
#define N 15
  for (int i = 0; i < N; i++) {
    /* */
  }
}

こんなコードまで発掘されました.

class yabaclass {
private:
#define ARRAY_SIZE 10
  // ...
};

また, 昨年秋から今年の初めまで触っていたとあるフレームワークでは, 特殊な構文を実現するために定義された大量のマクロに起因する不可解なコンパイルエラー に悩まされ, C++やめてやろうかとまで思ったりもしました.

もうこんなマクロ定義するの, やめませんか?

そうした思いを込めて, この記事では Cプリプロセッサとは何か, そして C++だからできる#defineを使わない書き方 について紹介できたらなと思います.

Read More »