C言語のプリプロセッサー「#define」

記事内に広告が含まれています。

プリプロセッサーはソースファイルをコンパイルする前に処理をしてくれくれるプログラムです。
C言語ではプリプロセッサーに渡す命令(コマンド)は前に「#」を付けて渡します。

プリプロセッサー「#define」

プリプロセッサーはソースファイルをコンパイルする前に処理をしてくれくれるプログラムです。
C言語ではプリプロセッサーに渡す命令(コマンド)は前に「#」を付けて渡します。
(プリプロセッサーディレクティブと呼んだりします。)

define

その中の1つ今回は「define」です。

この「define」は簡単に言うと「define」で定義されたキーワードを
ソースファイル内に見つけると、そのキーワードを定義された内容に
書き変えてくれるイメージです。
(実際のソースは書き変わりませんが、コンパイラにわたるソースは
 イメージとして書き変わっています。)

例えば

#define    FILE_NAME  "test.txt"

と宣言しておけばソースファイルないの「FILE_NAME」という部分は
すべて「test.txt」に置き換えてくれます。

#define    FILE_NAME  "test.txt"

int main()
{
    FILE *fp ;

    fp = fopen( FILE_NAME, "r" ) ;
    if( fp == NULL ){
        printf( "%sがオープンできませんでした。\n", FILE_NAME ) ;
        return -1 ;
    }
    fclose( fp ) ;
    return 0 ;
}

のように書くとソースファイル内の「FILE_NAME」が「test.txt」に
書き変わり

#define    FILE_NAME  "test.txt"

int main()
{
    FILE *fp ;

    fp = fopen( "test.txt", "r" ) ;
    if( fp == NULL ){
        printf( "%sがオープンできませんでした。\n", "test.txt" ) ;
        return -1 ;
    }
    fclose( fp ) ;
    return 0 ;
}

と書いたのと同じことになります。

これで便利なのは「FILE_NAME」が「”TEST.txt”」に変更に
なったとしても「#define」の宣言を「”TEST.txt”」に変更するだけで
ソース内のすべての「FILE_NAME」を「”TEST.txt”」に変更したのと
同じ意味になります。

実際のプログラムは同じ値を何か所にも渡って使用することは
当たり前にあるので、「#define」を利用することで、
スペルミスや、修正漏れを防いで、ソースのメンテナンス性を
上げるようにします。

タイトルとURLをコピーしました