TPY ENGINEERING VLOG

TPY ENGINEERING VLOG(C,JAVA)

*C言語* 〜50時限目〜 様々なデバッグ機能について・・・

〜目次〜

 

 

 

デバッグの仕組みについて

今までで、数多くのコードを入力してきました。

しかし、

コードを作成していく中で、

様々な誤りをおかしてしまう可能性は誰にでもあります。

例えば、

C言語の文法を誤ったために、

コンパイルがでいないことがあるかもしれません。

または、

コンパイルが成功し実行はできるが、

実行結果が期待通りにならない場合もあります。

プログラム中の誤りのことを、

バグ(bug)

と呼びます。

プログラムを完成させるためには、

そのバグを無くさなくてはいけません。

コード中のバグを探して訂正する作業のことを、

デバッグ(debug)

と呼びます。

C言語の環境は、

デバッグ作業を行うために、

いくつか便利な機能が備わっています。

これからC言語デバッグ機能について学んでいきます。

 

条件付きコンパイルの仕組みについて

デバッグ作業の1つとして、

変数の中身がどのような値を取っているかを確認することがあります。

プログラムの中には、

実行することができたとしても、

期待通りの結果にならないことがあります。

この時、

変数の中身を画面などに出力するコードを入力しておき、

おかしな値が格納されていないかを確認する作業を行うのです。

しかし、

バグを訂正した後に、

この画面表示のコードは不要なものになります。

ユーザーに配布する最終的なプログラムをコンパイルする段階では、

デバッグ用のコードは不要になるのです。

そこで、

C言語プリプロセッサは、

状況に応じてコンパイルをする指定を用意しています。

このことを、

条件付きコンパイル(conditional compilation)

と呼びます。

以下のコードを入力してください。

sample117.c

f:id:YuyaTerayama:20180918154240p:plainーsample117の実行画面ー

変数sumの中身は0です。

変数sumの中身は1です。

変数sumの中身は3です。

変数sumの中身は6です。

変数sumの中身は10です。

1~5までの合計値は15です。

#ifdef〜#endifという指示は、

条件に応じてコンパイルするコードを変える機能を持っています。

まず2行目で「DEBUG」というマクロを定義しています。

このマクロには置き換える文字列を指定していません。

ですが、

これもマクロ定義です。

10行目の#ifdefでは、

DEBUGマクロが定義されているかどうかを調べています。

DEBUGマクロが定義されていれば、

#ifdefから#endifまでの間の文がコンパイルされます。

2行目で定義したマクロを削除して、

もう一度コンパイル・実行をしてみてください。

そうするとエラーは起きずに実行結果だけが変わります。

尚、ここで変数の中身を表示するために、

fprintf( )関数を使っています。

最初の引数であるstderrは、

標準エラー出力と呼ばれる装置に結び付けられているストリームです。

標準エラー出力とは、

デバッグ情報などを表示するための装置のことをさします。

ここでは標準出力と同じ画面装置となっていますが、

実行環境によっては違う場所である場合もあります。

その際には、

標準エラー出力として指定されている場所に、

変数の内容が表示されることになります。

条件付きコンパイルには以下のような種類があります。

1.マクロが定義されていた場合にコンパイルする

#ifdef マクロ

  文;

  ・・・

#endif

2.マクロが定義されていない場合にコンパイルする

#ifndef マクロ

  文;

  ・・・

#endif

3.式の真偽でコンパイルする

#if 式1

  文;

  ・・・

#elif 式2

  文;

  ・・・

#else

  文;

  ・・・

#endif

 

次回は組み込みマクロから学んでいきます。

 

〜END〜