みなためラボ

【C言語】defineでソースコードの文字の置き換えをする方法

文字サイズ

はじめに

どうも! みなため(@MinatameT)です。

この記事では、defineで文字の置き換え(自動)をする方法を説明します。

置き換えとは、例えば……

  • scanfをinputに自動で置き換える。
  • printfをoutputに自動で置き換える。
  • return(0)をENDに自動で置き換える。

などです。それでは、defineの文法を説明していきます。

defineの文法

defineの文法!
文法#define ABC XYZ
※ABCは置き換え後の文字で、XYZは元の文字(置き換えられる前の文字)です。

XYZがソースコード上にあれば、ABCに自動で置き換える……ということです。

なお、置き換わるタイミングはコンパイルをするときです(本当はコンパイルの直前ですが、ユーザーにとってはコンパイルと同時です。)。

defineの使用例1

ソースコード

#include<stdio.h>

#define input scanf
#define output printf
#define END return(0)

int main(void)
{
  int a;
  
  output("整数値を入力してください。>");
  input("%d",&a);
  output("あなたが入力した値は%dです。\n",a);
	
  END;
}

#defineの行では、#include<stdio.h>の行のように、セミコロン(;)で文を終わらせません。セミコロン(;)をつけると、それも「置き換え対象の文字」として認識されてしまいます

それでは、実行結果の例を確認していきます。

実行結果の例

整数値を入力してください。>24
あなたが入力した値は24です。

このように、defineは文字の置き換えができることがわかりました。それでは、次の例では少しふざけて遊んでみることにします。

defineの使用例2

ソースコード

#include<stdio.h>

#define Function int main(void)
#define INT int
#define I scanf
#define O printf
#define J if
#define NOT else
#define END return(0);

Function
{

  INT a;

  O("整数値を入力してください。>");
  I("%d",&a);
  O("あなたが入力した値は%dです。\n",a);

  J(a<100)
  {
    O("この値は100未満ですね。\n");
  }
  NOT
  {
    O("この値は100以上ですね。\n");
  }

  END
}

嫌がらせレベルでわかりにくいコードになっており、他人に見せられるものではありません。これは「やりすぎ」です。

「便利かも?」と思うかもしれませんが、C言語に慣れている人にとっては「この文字はあの文字に置き換えたのか……。」といちいち考える必要があり、わかりにくいはずです。

それでは、実行結果の例を確認していきます。

実行結果の例

整数値を入力してください。>50
あなたが入力した値は50です。
この値は100未満ですね。

defineは便利ですが、使いみちを誤ると面倒なことになります。読みやすいソースコードになるように、置き換えしすぎないこと(defineを乱用しないこと)が大切です。

今回はここまでです。皆さん、お疲れ様でした。


 

みなためじゃんけん

このコーナーは、私と擬似的にじゃんけんできるコーナーです。

みなためじゃんけん、じゃんけんぽん!

私が出したのは……





チョキ

チョキでした! グーの勝利です!



この記事をSNSでシェアする

プログラミングカテゴリーの最新記事(5件)

最新記事(10件)

管理人のTwitter

内部リンク集