文字列操作は「C言語最大の欠点」か?

2010年10月22日 13:50

 あるAnonymous Coward 曰く、

 ITProのコラム「記者の目」は複数の日経BPの雑誌記者が記事にはしにくい個人的な意見などを書いている人気コラムだが、最近「C言語最大の欠点」というタイトルのコラムが掲載された。

 どうやらタレこみ子と同世代らしい記者は、C言語最大の欠点を文字列処理であると断じ、特にバッファーオーバーフローの回避のためのコードを書くのが大変なところと論じている。そして、C++でSTLのstringクラスを使うべし、と主張している。

 タレこみ子の乏しい経験からいうと、バッファーオーバーフローの問題は確かに大きな問題だが、それは「文字列」処理で起きるというよりは、ネットワークから受信する「データ列」の処理で起きるケースのほうが多いように思う。STLについては詳しくないのだが、stringクラスは'\0'も含みうるデータ列を正しく処理できるのだろうか。

 また、バッファーオーバーフローは問題として理解しやすく、コード中で対処しなければいけない場所も比較的容易に特定できるのに対し、整数オーバーフローの問題は、問題として理解が難しく、対処しなくてはいけない場所も格段に多いという点でより大きな欠点ではないかと感じている。

 バッファーオーバーフローや整数オーバーフロー以外にもC言語には様々な欠点があると思うが、/.jp諸兄は何が「最大の欠点」であるとお考えであろうか。ご意見をお聞かせ願いたい。

 また、あるAnonymous Coward 曰く、

 日経ITproに「C言語の最大の欠点」なる記事が掲載されている。記事では、gets()を用いて入力文字列を受け取る例を挙げ、「C言語の最大の欠点は文字列の扱いが非常に面倒なこと」と主張している。そして、解決策として「C++」を使えとと述べ、C++のストリームとSTLのstringクラスを用い、同様の処理を簡単に記述できると例示している。

 そのほか、「動的な配列として使えるvector」などをC++のメリットとして述べているのだが、これらはC++のメリットではなく、ライブラリのメリットのような気がするのだが……。

 STLやストリームといった有用な標準ライブラリが用意されている、という点は確かにC++のメリットではあるが、Cでも同様のライブラリがないわけではない。これを持って「C言語には欠点がある」と述べてしまうと大きなフレームの元になってしまう気がしてならない。

 スラッシュドットのコメントを読む | プログラミング

 関連ストーリー:
C言語(C90/C99~)の教科書・関数辞典でお勧めは?(ただし日・英両方あるもの) 2010年07月15日
メモリ操作の安全性を確保する、ANSI C規格準拠C言語コンパイラ 2008年04月16日
C言語入門、東京大学情報科学科の場合 2008年01月25日
終わってるITスキルトップ10 2007年05月25日

 

関連記事

最新記事