今どき、C言語は古いと思う方もいるかもしれませんが、まだまだC言語で作られたシステムが稼働していますのでメンテナンスのためにC言語がわかるエンジニアが必要です。
また、C++やC#で作られたシステムで発生した解析不能の不具合も、C言語を理解していればコアダンプやミニダンプから解析することができることがあります。
そこで、今回はC言語を知らないエンジニアが、C言語を理解するためのC言語マニュアルの作り方を解説します。
目次
C言語の必要性 ~C言語はC系言語の基礎~
確かにC言語を知らなくてもC++やC#でプログラムを組むことができます。昨今のITエンジニアと呼ばれる人たちは、C言語を知らずにC++やC#で、アプリケーションプを作っていることでしょう。
ただ次から次へとシステム開発を続け、作ったシステムを作りっ放しにできるのなら、ITエンジニアがC言語を知る必要はないかもしれません。
しかし、一定期間、運用したのちに、突然発生する原因のわからない障害に出会ったときに必要となるのが、言語の基本となっているC言語の知識です。
24時間運用の停止することが許されないミッションクリティカルなシステムでは、メモリリークによるシステムダウンはあってはならない事態で、システム開発はメモリリークとの戦いでとも言えます。そのミッションクリティカルなシステムが、ある日突然ダウンしてしまったらなどうなるでしょう。
システムダウンの原因の多くは、メモリリークとメモリ破壊です。
C++のテンプレートは基本的にC言語でできています。使い方を誤るとメモリリークを生むテンプレートがたくさんありますが、C言語を知らないとなぜメモリリークが発生するのか理解できず、障害の原因を突き止めることが難しくなってしまいます。
また、メモリ破壊の多くは解放済みメモリを使用してしまうことによって起ります。この仕組みもC言語を知らないと理解し難いものでしょう。
C言語はC++やC#の基礎となっている言語です。まだまだ使えるというよりも、ぜひ理解しておくべき言語なのです。
C言語は構造化プログラミングが基本
C言語は各モジュールの独立性を高めた構造化プログラミングが基本です。構造化プログラミングとは、大きな機能を細分化した細かい機能に分割し、機能ブロックを組み合わせてシステムを構築するプログラミング技法です。
この構造化プログラミングに、クラス変数を加え内部を隠ぺいし、ブラックボックス化したのがC++のクラスになりますので、まずはC言語マニュアルでは、構造化プログラミングの考え方をマスターさせましょう。
配列とポインタの考え方理解させよう
C言語を勉強していて、突き当たる壁が配列とポインタの考え方です。
配列とポインタを理解するには、C++やC#では隠蔽されている記憶領域のアドレスという概念を教えなければなりません。
以下のような基本的な考え方をC言語マニュアルに図解して記載しましょう。
配列の考え方
配列は、変数の繰り返し領域です。例えば、整数型で要素数を5とする場合、「int 配列名[5]」と定義します。配列の参照は「配列名[インデックス]」で参照し、インデックスは0から始まり。ここでしっかりインデックスの概念を記述しましょう。
ポインタの考え方
ポインタはアドレスを格納した領域であること理解させましょう。文字列ポインタと数値ポインタの違いも記述しましょう。
このほかにも、ポインタ配列や構造体配列の仕組みも記述してください。配列とポインタはC言語理解の最大のキーです。C言語マニュアルの半分を使ってもかまいませんので、しっかりと理解できるように詳しく図解して、理解できるようにしてください。
通常のマニュアルには書かれていないスタックと引数の関係を記載しよう
スタックとは、コンピュータの処理中のデータを1時的にある領域に退避させることや、データ待避する領域そのものを指します。スタックはあとに積んだデータを先に取り出す「後入れ先出方式」で管理されます。
C言語の関数の引数は、スタック領域に積まれスタック領域で引き渡されます。
通常のC言語のマニュアルには、スタックについては記述されていませんが、スタックはC言語アプリケーションのデバッグのキーです。
関数の引数のスタックへの積まれ方、取り出され方や、スタックに積まれることにより、引数は値渡しになり、関数の呼び出し側の領域と呼び出された関数の引数が独立した領域になることを理解できるように記述してください。
C言語マニュアルのメンテナンス
C言語マニュアルのメンテナンスは、特にこれといった時期はありません。しかし、作ったばかりのマニュアルは暫定的なものと考え、使いながら足りない部分を追加記載する必要があります。できれば、マニュアルの管理者を決め、年に1度でかまわないので見直しをして、アップデートするようにしましょう。
まとめ
C言語は、C系の言語の基礎になっています。C言語を理解することによって、C++やC#で作られたシステム開発時のデバッグや、運用開始後に発生した障害解析の大きな助けになります。最低限、C言語の配列とポインタを理解できるマニュアルを作りましょう。
◆マニュアル制作.comで作成した業務マニュアルの事例はこちら