大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

もしかしてレトロ趣味?

著者:高木信尚
公開日:2018/06/17
最終更新日:2018/06/17
カテゴリー:技術情報 雑記

高木です。こんにちは。

久しぶりのCのネタを書きたいと思います。
俗に「C言語」と呼ばれるCの話題です。

実は昨年末までガッツリCでコードを書いていました。
現在でもそのとき書いたコードのメンテナンスを若干行っていますので、Cは身近な存在だといえます。

そこで使っているCは2nd Edition、すなわちC99です。
1999年の終わりに制定された国際標準規格だからC99という通称で呼ばれています。

最新のCのバージョンは3rd EditionであるC11です。
2011年にできた規格ですね。
その後も正誤表は出ていますが、機能としてはC11が最新ということになります。

それらを踏まえて、これからの内容を読み進めていただければと思います。

どうも世の中では、いまだにC89またはC90が使われることのほうが多いようです。
C89というのは1989年にANSIによって、C90は1990年にISOによって標準規格になったもので内容は同じです。
今回は便宜的に、両方を区別せずC89と呼ぶことにします。

1989年というと平成元年ですよ。
もう30年近く前の規格なんです。
その後、コンピュータの進化その他にあわせてCも進化しているんです。
しかし、そうした進化を一切はねのけてレトロな旧規格に固執する人たちがいるようです。

そういう私も大きなことはいえないのかもしれません。
何しろ、現在使っているのがC99で、これまた20年近く前の規格だからです。
ただ、私がC99を使うことにした理由は明確で、使用していた開発ツールがC99までしか対応していなかったからです。
決してレトロ趣味ではありません。

そういえば一昨年も別の開発でC99を使っていました。
そのときはGCCだったのでC11も使えたはずです。
「なぜC99を使ったんだろう?」と一瞬考えましたが、これまた理由は明確でした。

そのときの開発では、Windowsと某マイコンの両方をターゲットにしていました。
Windowsと某マイコンを対象としたプログラムはまったく別だったのですが、一部に共通部分があり、それを実装するのにC99を使っていました。
某マイコンの開発ツールがC99までしか対応していなかったからです。
共通部分以外はWindowsではほぼC++とC#を使っていましたので、CについてはC99に統一したのです。

改めて考えてみると、私がCを使うのはほぼマイコンのプログラミングだけです。
それであれば、C11をどうしても使いたくなるほどの理由は実はあまりありません。
せいぜい、_Alignas指定子、alignof演算子、_Static_assert程度で、いずれもなくてもどうにかなります。
あれば便利なのは確かなのですが、可変長配列が使えなくなる可能性があるなど、代償もあります。

一方で、新規開発であるにも関わらず、C99を使わずC89を使い続ける理由はあまり見当たりません。
もちろん、開発ツールがC89にしか対応していないのであればしかたがありませんが、そうでなければ考えられる理由は次のいずれかです。

  1. 開発ツールの評価・認証プロセスが大変で、簡単には新しいものに変更できない。
  2. 怠慢により新しい規格を勉強していない。
  3. 単なるレトロ趣味

担当者がマゾヒストであるとかの理由も考えられないわけではないのですが、ここでは除外することにしました。

Cの歴史は長く、最初のものが登場したのは確か1972年だったと思います。
C89ができるまでに17年もかかっています。
その後も、C89に対応した処理系が普及するまでそれなりの期間がかかっています。
その間に古い流儀が染みついてしまった人も当然少なくありませんでした。

そういえば、まだC99がなかった1999年ごろ、関数原型(いわゆるプロトタイプ)を書いていると、現場の責任者から「なぜ分離形式で書かないのか?」と追及されたことがありました。
彼も馬鹿ではなかったので、関数原型の有用性を説明すればちゃんと理解してくれました。

怠慢によってC89をいつまでも使い続けるのも問題ですが、新しいCを使うべき理由をきちんと説明しないのもまた怠慢です。
多くの現場でいまだにC89を使い続けている本当の理由はどこになるのでしょうかねえ?

    上に戻る