はじめに
どうも! みなため(@MinatameT)です。
この記事では、defineで文字の置き換え(自動)をする方法を説明します。
置き換えとは、例えば……
- scanfをinputに自動で置き換える。
- printfをoutputに自動で置き換える。
- return(0)をENDに自動で置き換える。
などです。それでは、defineの文法を説明していきます。
defineの文法
文法#define ABC XYZ
※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を乱用しないこと)が大切です。
今回はここまでです。皆さん、お疲れ様でした。