マクロによって作られた自作関数の特徴を考察してみましょう。
アレサ「ソーラーさん 先程のプログラムを
振り返ってみます」
ソーラー「そうだね。」
#include<stdio.h>
#define f(a) a+1
int main(void){
printf("%d\n",f(1));
return 0;
}
コンパイル結果
2
#include<stdio.h>
#define f(a) a+1
int main(void){
printf("%f\n",f(1.0));
return 0;
}
コンパイル結果
2.000000
アレサ「さきのエピソードでも見てきたように
#define f(a) a+1
と f(a)をa+1とみなすマクロの定義において
aは変数宣言されていないのですが
整数値や実数値を代入することができます
面白い設定になっていますね
それでは次のプログラムの
コンパイル結果はどうなるでしょうか?」
#include<stdio.h>
#define f(a) a+1
int main(void){
printf("%d\n",f(1));
printf("%d\n",a);
return 0;
}
アレサ
「
printf("%d\n",f(1));
のあとに
printf("%d\n",a);が記述されています
f(a)にf(1)とaに1が代入することができているなら
printf("%d\n",a);
のコンパイル結果は1となるのでしょうか?
どう思われますか ソーラーさん?」
ソーラー「みなさん、 僕がソーラーです(*´▽`*)
よろしくお願いします
さあ 皆さんはどうおもわれますか?」
printf("%d\n",a);
ですか?
幸せですか?
今のプログラムでは
#define f(a) a+1
で定義された
自作関数f(a)のaに1を代入しています
ローカル変数の時と同じように
自作関数で定義されたaと
main関数内で定義された変数aは
違う変数となるんじゃない?
だから今のプログラムでは
main関数内で変数aは定義されていないので
printf("%d\n",a);
のaは定義されていません、と
コンパイルエラーが出るんじゃないかな?」
アレサ「うう・・・・まともな考察です。
そう来られるとは予想していませんでした。
では
実際にプログラムをコンパイルしてみます。
#include<stdio.h>
#define f(a) a+1
int main(void){
printf("%d\n",f(1));
printf("%d\n",a);
return 0;
}
コンパイル結果
ファイル「C:/Users/solarplexuss/AppData/Local/EasyIDEC/project/ www/main.c」の
「8行目」で記述エラーを発見しました。
「a」が定義されていません。
名前が間違っていないかどうか確認してください。
アレサ「ん~んん ソーラーさん お見事正解です」
ソーラー「えへへー 正解するとはね」
アレサ「では
次のプログラムはコンパイル結果はどうなるでしょうか?
#include<stdio.h>
#define f(a) a+1
int main(void){
int a=2;
printf("%d\n",f(1));
printf("%d\n",a);
return 0;
}
ソーラー「今度はmain関数内でaが
int a=2;
と
変数宣言、2を代入されて初期化されてるね。
だから
printf("%d\n",a);
のコンパイル結果は2だね。
int a=2;のあとに
printf("%d\n",f(1));
と
f(a)の
aに1が代入されているからと言って
printf("%d\n",a);
のコンパイル結果は1にはならないと思うんだ
だって
同じaでも
自作関数で定義されたaと
main関数内で定義された変数aは
違うものとしてあつかわれますからね
自作関数のaに1を代入したからといって
main関数内で定義された変数aに1が代入されたことにはならない
だから
main関数内で
int a=2;
と定義された変数aに格納された数値は
a=2のまま 変化せず
printf("%d\n",a);
のコンパイル結果は2になるんじゃないかな?」
アレサ「・・・・・・正解ですの
今のプログラムをコンパイルしてみます」
#include<stdio.h>
#define f(a) a+1
int main(void){
int a=2;
printf("%d\n",f(1));
printf("%d\n",a);
return 0;
}
コンパイル結果
2
2
アレサ「ソーラーさんの 予想通り
コンパイル結果は2となっています」
ソーラー「やったね🌞」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます