2010-07-28

ひとつの宣言文で複数の変数を宣言するなかれ

C++では、ひとつの宣言文で、複数の変数を宣言できる。(宣言子は、厳密には、変数だけではないのだが)

int a, b, c, d ;

これは分かりやすい。同じ型の変数が複数欲しい場合は、重宝する。しかし、この文法は根本的に邪悪である。複数の変数を宣言してはならない。Bjarne Stroustrupも、D&Eで、「もし俺がCを土台としていなかったら、ひとつの宣言文で複数の変数を宣言できるようにはしていなかった」と書いている。

何故だめなのか。それには、例を示す方が分かりやすい。

int * a, b, c[5], (*d)(void) ;

このコードを全く躊躇せず、何も参照せずに、脳内で理解できるのならば、ひとつの宣言文で複数の変数を宣言してもよい。

1 comment:

萌ゑ said...

>int * a, b, c[5], (*d)(void) ;

仕事柄理解できますが、こういう書き方はしませんね。

まず関数ポインタはtypedefですわ。