C语言-预处理器

宏替换

可以预定义代码块什么的,还可以传递参数

#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 对常量表达式进行求值

#if expr
#define P printf
#endif

只有expr是0时才不包含其中的定义。
#ifndef用来测试某个名字是否已经定义,经常用于头文件,避免多次包含同一头文件

#ifndef OS_CSAPP_H
#define OS_CSAPP_H

#include 
#endif //OS_CSAPP_H

程序块结构

    {
        int t;
        t = a;
        a = b;
        b = t;
    };

其中t对外部不可见

你可能感兴趣的:(C语言-预处理器)