私の戦闘力は53万マイクロです

農夫のおっちゃんの10分の1程度の戦闘力で適当に生きる、意識低い系サラリーマンのブログ

C言語で「#include ○○」のことを「おまじない」と教えてはいけない

f:id:ken530000:20181226214343j:plain

※本記事はC言語経験者向けです。

 

C言語でプログラム作るとき、ファイルの先頭で、

#include ○○

と書いて、そのファイル内で必要になるヘッダファイルを取り込むじゃないですか。

 

最初C言語習ったとき、この「#include ○○」のことを「おまじない」って習いませんでした? 僕は大学で初めてC言語を習ったときに、担当講師からそう教わりました。

 

この教えかたってあまり良くないんじゃないかなと思います。 

 

C言語初心者の友人の失敗

電気系の仕事をしている友人(C言語は大学で習っただけでほぼ初心者)が、最近趣味で電子工作を始めました。キットなどを使わずに、自分で回路を設計してコイルガンを作りたいんだとか。

 

で、本業に近い電子回路設計のほうは比較的スムーズに行ってるらしいんですが、C言語で作った制御プログラムでつまづいていると先日相談を受けました。

 

友人曰く、

「C言語の練習のために、LEDを点灯するプログラムをサンプルソースコピーして作成した。回路もプログラムも問題無いはずなのに、何故かLEDが点灯しない・・・」

とのこと。

 

サンプルソースを元に作ってるならプログラムにミスは無いだろうし、回路もLEDを点灯させるだけのものなので、まず大丈夫のはず。プログラム転送に失敗しているとかいうオチかな・・・?

 

と思っていたら、真相はこうでした↓

  • 開発環境を構築する際に漏れていたヘッダファイルがあり、ビルドエラーが発生していた
  • ビルドを通すために、エラーの出てる行をコメントアウトした

 

初心者がよくやりがちな失敗ですね。

 

 

「#include ○○」=「おまじない」と覚えることで、軽視してしまう怖れ

この失敗を聞いてちょっと思ったんですが、そもそも初心者がこういう失敗をしがちなのって、

「#include ○○」=「おまじない」

って教えてるところが多いのが原因じゃないかなと思うんですよね。

 

確かに最初のうちにあまりゴチャゴチャしたところを教えるとわかりづらくなるし、

「とりあえず後回し」して、コア部分から教えていく、という考え方は一理あります。

 

でもそれによって「#include ○○」の部分が「重要でないモノ」として変な風に頭にインプットされちゃう危険性があると思うんです。

 

で、いざincludeが原因のエラーが出ても、そこが原因だとなかなか気づけないんじゃないかな、と。

 

 

どう教えるか?

じゃあ、どうすればいいかって話なんですが、やはり最初の段階でちゃんとある程度の意味を教えるべきだと思います。それによって多少とっつきづらくなるのは覚悟の上で。

 

新しい言語を学ぶ際のお約束「Hello, World」をC言語で書こうとすると、

printf("Hello, World");

になりますが、ここで同時に、

「printfというコマンド(関数という言葉は馴染みにくいので、コマンドとしておく)を使うためには、先に#include <stdio.h>と書いておく必要がある」

くらいのことは説明してもいいんじゃないですかね。

 

どうせ学んでいく上でいつかは知らなくちゃいけないことだし、「おまじない」と言って誤魔化すくらいなら、一応本質の部分に触れておくべきかと思います。

 

あまり杓子定規に教えても堅っくるしいので、何かわかりやすい例え話を出せればなお良いですが、例え話ってセンス要るので難しいですよね・・・僕もちょっと考えてみましたが、なかなか良いたとえ話思いつきませんでした(笑)

 

 

「○○を使うためには△△が必要」

この発想を初期の段階で習得しておくことで、友人の例のようにincludeミスによるエラーが出たときも、

「なんか定義が無いとかなんとか言われてるけど、ひょっとして僕が書いたコマンドを使用するために必要なinludeを書き忘れたのかな?」

と、エラー解決のとっかかりが掴みやすいと思います。

  

 

「#include ○○」=「おまじない」

という教え方は、問題を先送りして後々余計つまづきやすくなるだけじゃないかなと個人的には思います。

 

「C言語にちょっと触れてみたい」

だけならともかく、何かの目的があってC言語をガッツリ使いたいという人に対しては、多少わかりづらくてもきちんとそれぞれの構文や決まりごとの意味を教えたほうがいいですね。そっちのほうが結果的に近道になるかと。