GCC 5.xはC11がデフォルト
こんにちは、高木です。
昨日書いたように、現在は若手技術者にCを教えています。
そこで気になったことがあるので書き留めておくことにします。
Cの教育にあたり、CコンパイラにはGCCを使用しています。
正確にいうとMinGW-w64の64ビット版コンパイラを使っています。
バージョンは5.2です。
以前はCといえば古いC90(またはC89)が当たり前だったのでした。
最近はコンパイラの対応状況も進んで、より新しい機能を使えるようになっています。
現在私が実際に仕事で使っているCもC99です。
実際の仕事で使うには、最新の機能が使えるのは歓迎すべきことです。
けれども教育に使うには、まずは基本であるC90から教えたいものです。
なぜなら、まだまだC90を使っている現場は少なくないはずですから。
ところが、たまたま手元にあったので使うことにしたGCC 5.2は、デフォルトで-std=gnu11を指定したのと同じになっています。
つまり、C11がデフォルトで、しかもGCC拡張までついてくるのです。
これを普段JavaやC#を使っている若手技術者に使わせると、当然いつもの癖でC90では使えない文法を使ってしまいます。
初期化をブロックの途中で行うとか、定数式以外で集成体を初期化するとかです。
-std=c90 -pedanticといったオプションを指定させてもいいのですが、これは面倒ですし、学習者の負担が大きすぎます。
仕方なく都度指導するようにしています。
何かいい方法はないもんですかねえ。