僕の一番得意なプログラミング言語はC言語で、昔この賦録でも以前に「C系言語の缺陷 - 等號」といふ記事を書いた事がある。今囘はその續篇である。
C系言語は値の設定に「=」を使用するが、これがバグ(蟲)の温床となつてゐる。例へばif文の中に「=」があると、「==」の誤りなのか「=」で正しいのかに迷ふ。
これらの問題は例へば「=」の替りに「:=」を使ふだけで解決する。要するに「=」を使はない言語仕樣にすれば良いだけの話なのである。これが前囘の記事の主旨である。
その他にも、例へばif文の後の文が一行だけのときは、中括弧「{}」で圍はなくても良い、といふ餘慶な御世話の仕樣がある。
これは将来的にバグの温床となる可能性がある。後で二行目に文を追加したくなつたとき、つい中括弧「{}」の事を忘れてしまふのだ。
つまり、必ず中括弧「{}」を付ける、と言語仕樣で定めておけば、此樣なバグは未然に防ぐ事ができるのである。
中括弧「{}」には、それ以外にも效用がある。次の文を見ていただかう。
while (條件)
proc0 ();
proc1 ();
インデントを整へると、我々はつい胡麻化されてしまふが、これは次の文と同じ意味である。
while (條件)
{
proc0 ();
}
proc1 ();
つまりC言語のインデントはあくまでもコーディング作法であつて文法的には意味がないのだ。本當はPythonのやうにインデントを文法に組込むべきである。
次善の策としてはif文やwhile文などでの中括弧「{}」の省略を許さない。コンパイル・エラーが必ず起きるやうにする。
かういふ變更をコンパイラに追加しただけで、C言語は驚くほどバグに強くなる。昔、僕はそれらのテクニックを「modified C言語」として仕樣書に纏めた事がある。
今年は「modified C言語」から「C言語」へ變換するプリプロセッサを公開する豫定である。興味のある方はコメントしていただきたい。
ANCI C も C99 も、便利にはなつても安全にはなつてゐない。そして「modified C言語」はプリプロセッサとMakefileによつて、ANCI C や C99 との共存も可能である。
以前に書いた「C系言語の缺陷 - 等號」といふ記事が結構讀まれてゐるやうなので、久しぶりに續編を載せました。
C系言語は値の設定に「=」を使用するが、これがバグ(蟲)の温床となつてゐる。例へばif文の中に「=」があると、「==」の誤りなのか「=」で正しいのかに迷ふ。
これらの問題は例へば「=」の替りに「:=」を使ふだけで解決する。要するに「=」を使はない言語仕樣にすれば良いだけの話なのである。これが前囘の記事の主旨である。
その他にも、例へばif文の後の文が一行だけのときは、中括弧「{}」で圍はなくても良い、といふ餘慶な御世話の仕樣がある。
これは将来的にバグの温床となる可能性がある。後で二行目に文を追加したくなつたとき、つい中括弧「{}」の事を忘れてしまふのだ。
つまり、必ず中括弧「{}」を付ける、と言語仕樣で定めておけば、此樣なバグは未然に防ぐ事ができるのである。
中括弧「{}」には、それ以外にも效用がある。次の文を見ていただかう。
while (條件)
proc0 ();
proc1 ();
インデントを整へると、我々はつい胡麻化されてしまふが、これは次の文と同じ意味である。
while (條件)
{
proc0 ();
}
proc1 ();
つまりC言語のインデントはあくまでもコーディング作法であつて文法的には意味がないのだ。本當はPythonのやうにインデントを文法に組込むべきである。
次善の策としてはif文やwhile文などでの中括弧「{}」の省略を許さない。コンパイル・エラーが必ず起きるやうにする。
かういふ變更をコンパイラに追加しただけで、C言語は驚くほどバグに強くなる。昔、僕はそれらのテクニックを「modified C言語」として仕樣書に纏めた事がある。
今年は「modified C言語」から「C言語」へ變換するプリプロセッサを公開する豫定である。興味のある方はコメントしていただきたい。
ANCI C も C99 も、便利にはなつても安全にはなつてゐない。そして「modified C言語」はプリプロセッサとMakefileによつて、ANCI C や C99 との共存も可能である。
以前に書いた「C系言語の缺陷 - 等號」といふ記事が結構讀まれてゐるやうなので、久しぶりに續編を載せました。