宏替換
可以預(yù)定義代碼塊什么的,還可以傳遞參數(shù)
#include "csapp.h"
#define NAME(A) "hello"#A
#define FOR(i,start,end) for(int i=start;i<=end;i++)
#define MAX(A,B) A+B+9
#if 1
#define P printf
#endif
#define swap(t,x,y) {int t;t=x;x=y;y=t;}
int main()
{
int a=1;
int b=2;
swap(t,a,b);
P("%d->%d\n",a,b);
FOR(k,1,2) {
puts(NAME(TOm));
P("%d->%d\n",k,MAX(k,k));
};
}
條件包含
#if 對(duì)常量表達(dá)式進(jìn)行求值
#if expr
#define P printf
#endif
只有expr是0時(shí)才不包含其中的定義。
#ifndef用來(lái)測(cè)試某個(gè)名字是否已經(jīng)定義,經(jīng)常用于頭文件,避免多次包含同一頭文件
#ifndef OS_CSAPP_H
#define OS_CSAPP_H
#include <stdio.h>
#endif //OS_CSAPP_H
程序塊結(jié)構(gòu)
{
int t;
t = a;
a = b;
b = t;
};
其中t對(duì)外部不可見(jiàn)