ソフト開発

記者の眼

日経ソフトウエア

C言語最大の欠点

解決策はある

図2●C++で作成した、入力された文字列を出力するプログラム(inout.cpp)
[画像のクリックで拡大表示]

 筆者が気付くような大きな欠点であるのだから、C言語を愛する人々がそれに気付かないはずはない。ちゃんとした解決策はある。C++を使うことだ。図2はその例である。

 6行めでは、C++のSTL(Standard Template Library)に含まれるstring(basic_stringクラス)の変数sを宣言している。7行めではcinからgetlineして、sにユーザーが入力した文字列を格納し、8行めにcoutで出力する。これなら、少なくともこのプログラムを書く開発者のレベルでは、文字数制限を気にする必要はない。

 マイクロソフトのVisual C++のCLコマンドでコンパイルするなら、

cl /EHsc inout.cpp

のように/EHscオプションを付ける。LinuxでGCC(GNU Compiler Collection)のC++コンパイラを使うなら、

g++ inout.cpp

とすればよいだろう。Windowsでg++を使う場合は-enable-auro-importオプションを追加するとよい。

図3●Visual C++で.NET Frameworkを使う形で作成した、入力された文字列を出力するプログラム(inout_net.cpp)
[画像のクリックで拡大表示]

 Visual C++を使っているなら、.NET Frameworkを使う方法もある。図3はその例だ。4行めで.NETのString型を使い、5行めでConsole::ReadLineで1行読み込んで、6行めでConsole::WriteLineで出力する。これもシンプルで簡単だ。Visual C++のCLコマンドでコンパイルするなら、

cl /clr inout_net.cpp

とすればよい。

C++を再評価してもいいのでは?

 筆者がここで言いたいのは、そろそろC++を使ってみてもいいのでは?ということだ。C++は仕様がなかなか定まらずに迷走していた感があるが、先ほど見たように、Visual C++でもg++でも、ある程度同じプログラミングができるようになりつつある。

 もちろん、C言語一式を用意するのとC++一式を用意するのは作業量が全然違う。C言語はあるけれどC++はない、という作業環境もあるだろう。そういう環境では、C言語を頑張って使い続けることになると思う。

 C言語で文字列を扱うのは容易ではない。そこを突く形で他のプログラミング言語が普及した面もあるのではないか。一方で、C++がここまで育った現在、ちょっとした実用プログラミングは、C++で楽にこなせるはずだ。ぜひ、C++を再評価してみていただきたい。

 最後にムックの宣伝を少し。先ほども少し紹介したが、日経ソフトウエアは2010年10月15日に「ゼロから学ぶ!最新C/C++」を発売した。マイクロソフトの主力開発ツール「Visual Studio 2010」の無償版である「Visual Studio 2010 Express」のDVD-ROMが付属し、それをインストールしてC/C++のプログラミングを学べる。

 第3部では先に紹介したC++のstringだけでなく、動的な配列として使えるvectorなどを活用して、C++のメリットを打ち出している。C言語とC++の実用的な入門書として、多くの人に使ってもらえれば筆者冥利に尽きる。

(原田 英生=日経ソフトウエア)  [2010/10/21]

この記事に対する読者コメント

コメントに関する諸注意 コメント投稿 コメント一覧