「05.5解説」の編集履歴(バックアップ)一覧はこちら
「05.5解説」(2008/07/28 (月) 17:04:29) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
//C
#include <stdio.h>
マクロ宣言です。使うところでどう呼び出されるか分からないので、余分に括弧を付けるのが慣例です。
#がつく命令はプリプロセッサ命令といって、コンパイル時の処理を指定するものです。
なのでマクロを使用することで関数よりも実行時のロスを減らせる代わりに、コンパイル時間が長くなります。
この程度の処理だったらマクロの方が簡単で高速でしょう。
しかしマクロは単純にコードを置換するだけなので、変数の不一致などには無頓着でそのまま置換しちゃいます。
そこのところは注意してください
#define HEIKIN(a,b) (((a)+(b))/2)
void main(){
全てdoubleで宣言しました。キャストするのがめんどくさいので。
double a, b;
doubleのエスケープシーケンスは%fと言いましたが、scanfでdoubleを指定する場合は「%lf」です
ややこしいですが、我慢して指定しましょう・・・
printf("数字を入力してください : ");
scanf("%lf", &a);
printf("もういっちょ入力してください : ");
scanf("%lf", &b);
マクロを呼び出してます。これでここは上に宣言した通りに置換されます。
ね、かんたんでしょ?
printf("2つの数字の平均は %f です。", HEIKIN(a,b));
return;
}
//C
#include <stdio.h>
/*マクロ宣言です。使うところでどう呼び出されるか分からないので、余分に括弧を付けるのが慣例です。
#がつく命令はプリプロセッサ命令といって、コンパイル時の処理を指定するものです。
なのでマクロを使用することで関数よりも実行時のロスを減らせる代わりに、コンパイル時間が長くなります。
この程度の処理だったらマクロの方が簡単で高速でしょう。
しかしマクロは単純にコードを置換するだけなので、変数の不一致などには無頓着でそのまま置換しちゃいます。
そこのところは注意してください
*/
#define HEIKIN(a,b) (((a)+(b))/2)
void main(){
/*全てdoubleで宣言しました。キャストするのがめんどくさいので。*/
double a, b;
/*doubleのエスケープシーケンスは%fと言いましたが、scanfでdoubleを指定する場合は「%lf」です
ややこしいですが、我慢して指定しましょう・・・*/
printf("数字を入力してください : ");
scanf("%lf", &a);
printf("もういっちょ入力してください : ");
scanf("%lf", &b);
/*マクロを呼び出してます。これでここは上に宣言した通りに置換されます。
ね、かんたんでしょ?*/
printf("2つの数字の平均は %f です。", HEIKIN(a,b));
return;
}