宏屬于預(yù)編譯,在編譯的時(shí)候就將你的
創(chuàng)新互聯(lián)建站是一家專注于做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計(jì),密山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:密山等地區(qū)。密山做網(wǎng)站價(jià)格咨詢:13518219792
SSSV(sa,sb,sc,vv);
替換成
sa=l*w;sb=l*h;sc=w*h;vv=w*l*h;
這些編譯器已經(jīng)給你處理了,宏這個(gè)就是直接替換
宏有編寫規(guī)范的,你這里寫的宏并不規(guī)范,建議上網(wǎng)查一下宏書寫的規(guī)范
首先你要理解什么是預(yù)處理命令#define。它的作用是:在編譯之前,對(duì)#define的參數(shù)在作用范圍內(nèi)進(jìn)行替換操作。如:
#define A 2
int b = A; // 在編譯之前,這行代碼會(huì)被替換成: int b = 2;
所以#define只是替換,可沒(méi)有定義相關(guān)的參數(shù)。用這道題來(lái)舉個(gè)例子:
#define JH(a, b, t) t=a; a=b; b=t;
int t, a=1, b=2;
JH(a, b, t); // 在編譯之前,這行代碼會(huì)被替換成: t=a; a=b; b=t;
所以如果沒(méi)有定義t,那么t=a; b=t; 就會(huì)報(bào)錯(cuò)。而且如果你沒(méi)定義t,你又是如何使用
JH(a, b, t)呢?因?yàn)槟惚仨殞懗龅谌齻€(gè)參數(shù)。還有就是要注意在最后它少加了一個(gè)分號(hào):
#define JH(a, b, t) t=a; a=b; b=t // 題目中t后面沒(méi)有分號(hào)
這是為了以函數(shù)的形式使用宏定義,同時(shí)也表明#define只是簡(jiǎn)單的替換,并不是執(zhí)行代碼。這樣的用法是十分常見的。
C的宏可以用來(lái)替換常數(shù),替換表達(dá)式,仔細(xì)把這個(gè)程序看完你就明白了,
#includestdio.h
#define SQ(x) ((x)*(x))
#define READ(x) scanf("%d",x)
#define WRITELN(x) printf("%d\n",x)
int main()
{
int x;
READ(x);
WRITELN(SQ(x+1));
return 0;
}
程序輸入4 輸出25
宏的作用主要有:宏定義和宏替換。宏定義主要是定義一些參數(shù),提供編譯程序識(shí)別使用,實(shí)現(xiàn)條件編譯,以屏蔽實(shí)現(xiàn)多平臺(tái)差異、實(shí)現(xiàn)調(diào)試版和發(fā)行版等功能。宏定義可以簡(jiǎn)單的理解成字符替換,便于程序的編寫和修改,如程序要多次取兩個(gè)數(shù)中的教大值,可以定義宏:
#define max(a,b) ((a)(b)?(a):(b),語(yǔ)句 c = a b? a, b,就可以使用 c = max(a,b)。
又如,程序要多次使用 3.141592653,可以定義宏:#define PI 3.141592653,使用到3.141592653 的地方就用 PI 取代。
指針作為函數(shù)參數(shù),將內(nèi)存地址傳遞給函數(shù),函數(shù)可以操控這個(gè)指針指向的內(nèi)存數(shù)據(jù)。
上面是 宏 定義。
第一行 DEFINE...SUITE 是宏函數(shù)名,小括號(hào)里是 三個(gè) 形式參數(shù)。 定義為 下面第二行開始 含 續(xù)行號(hào)的 所有的行。 程序中出現(xiàn) DEFINE...SUITE 宏函數(shù)時(shí),均用 它的 定義句 做字符替代。
定義句替代宏函數(shù)時(shí),凡是有 三個(gè)形式參數(shù) 的地方,用 實(shí)際參數(shù) 做字符替代。
## 是 連接符,用于一個(gè)Token 與另 一個(gè)Token 的 連接,(Token 也可以是另外的宏,也可以不是)。
例子: 若形參_sym的實(shí)際參數(shù) 是 XYZ, 那么 _test_str_##_sym[] 變成 _test_str_XYZ[]。 這個(gè) _test_str_XYZ 是 static const char型 數(shù)組的名字。
后面還有個(gè) .name = _test_str_XYZ, 也是token的連接。