C語言 無參宏的定義與使用
無參宏就是用一個標(biāo)識符代表一個字符串,程序中使用到無參宏的地方,預(yù)處理時會直接用該字符串替換無參宏。
對于宏的操作包括:宏定義、宏調(diào)用以及宏展開。
1.無參宏的定義形式
#define標(biāo)識符字符串
例如:
#define PI 3.14159
說明:
①“#”表示這是一條預(yù)處理命令,“define”是宏定義命令,“標(biāo)識符”是所定義的宏名,“字符串”可以是一個任意類型的常數(shù)、表達(dá)式、格式串等。
②宏名一般建議使用大寫字母表示,以和普通變量區(qū)分開。
2.宏調(diào)用
在程序中當(dāng)需要使用一個字符串時,用宏名表示。
例如,一個求圓面積和周長的程序如下:
#include <stdio.h>
#define PI 3.14159 /* 此處為宏定義 */
main()
{
int r=3;
float s,c;
printf("input radius:\n");
scanf ("%d",&r);
s=PI*r*r; /* 宏定義 */
c=2*PI*r; /* 宏定義 */
printf("s=%f ,c=%f\n",s,c);
}
程序中,無參宏P(guān)I-?旦定義,就可以在程序中用到 “3.14159” 的地方用PI來表示。
3.宏展開
編譯預(yù)處理時用宏代表的字符串替換宏名的過程,稱為宏展開,例如上述程序,宏展開后就成為:
main()
{
int r=3;
float s,c;
printf("input radius:\n");
scanf("%d",&r);
s=3.14159*r*r;
c=2*3.14159*r;
printf("s=%f,c=%f\n",s,c);
}
4.關(guān)于無參宏的使用說明
①宏定義不是C語言語句,不能在行尾加分號“;”,否則,宏展開時,會將分號作為字符串的一部分一起展開替換宏名。例如:
#define PI 3.14159;
展開時就會成為如下形式:
s=3.14159;*r*r;
②宏定義命令#define出現(xiàn)在函數(shù)的外部,宏名的有效范圍是:從定義命令之后到本文件結(jié)束。通常,宏定義命令放在文件開頭處。在程序中可以使用#undef命令終止宏定義的作用域,例如:
#include <stdio.h>
#define N 100
#define PI 3.14
main
{
…
}
#undef N
void fun()
{
…
}
由于#undef的作用,使宏f\ffimain()函數(shù)結(jié)束時就終止,所以fun()函數(shù)出現(xiàn)N也不代表100,但PI的作用域從開始定義一直到文件結(jié)束。使用#undef可以靈活地控制宏的作用范圍。
③預(yù)處理器在用字符串替換程序中出現(xiàn)的宏時,只是簡單地替換,并不做語法檢查。例如,假設(shè)設(shè)計者手誤,將3.14159寫成了3.f4159:
#define PI 3.f4159
程序在編譯時會出現(xiàn)“操作數(shù)無效”的錯誤。
5.無參宏的應(yīng)用
無參宏在實際中可以應(yīng)用到很多方面,主要有以下幾個方面:
(1)符號常量
如前面用到的PI、N都是符號常量的形式。
恰當(dāng)命名的符號常量能表達(dá)出宏所代表的字符串常量的實際含義,從而增強(qiáng)程序的可讀性。例如:
#deflne EOF -1 /* 文件尾 */
#define NULL 0 /* 空指針 */
(2)用宏定義表示數(shù)據(jù)類型
用宏定義表示一個數(shù)據(jù)類型,在程序中使用宏來定義數(shù)據(jù),非常方便且直觀,例如:
#deflne SINGLE float
程序中,就可以使用SINGLE定義單精度變量,如:
SINGLE x, y:
(3)用宏定義表示輸入和輸出
例如:
#deflne PI 3.14
#define S PI*r*r
樸 define OUT printf("%f ",S)
#deflne IN scanf("%d",&r)
main ()
{
int r;
IN;
OUT;
}
IN代表輸入函數(shù)scanf(),OUT代表輸出函數(shù)printf()。
(4)用宏定義表示輸出格式
上題所用的丨N和OUT不具備通用性,如果將程序稍作改變:
#define PI 3.14
#deflne S PI*r*r
#deflne F "%f"
#deflne D "%d"
#define OUT printf
#define IN scanf
main()
{
int r=3;
IN(D,&r);
OUT(F,S):
}
程序中用宏F代表格式字符"%f",用宏D代表格式字符"%d",這樣凡是在程序中需要用到這兩個格式字符的地方全部可以用F、D代替。
點擊加載更多評論>>