vlambda博客
学习文章列表

C语言程序18:宏定义与预处理

C语言程序18:宏定义与预处理

Merry Christmas

C语言程序18:宏定义与预处理

宏定义与预处理


一、宏定义与宏函数

#include <stdio.h>

#include <stdlib.h>

/*

1.宏替换

1.1 符号常量

1.2 可以替换任何东西

注意:宏替换不是语句 所以没有;

2.宏函数:带参数的宏替换

一定是参数带括号

*/

#define MAX 100//符号常量

#define INT  int

struct MM

{

char name[20];

int age;

int num;

char addr[20];

};

#define INFO struct MM

#define M 1+2

typedef int intData;

#define type "%s\t%d\t%d\t%s\n"

#define Data mm.name, mm.age, mm.num, mm.addr

//宏函数-->忽略类型去做处理

#define SWAP(a,b) (a)=(a)+(b),(b)=(a)-(b),(a)=(a)-(b)


//为什么加括号

//限制替换的计算的优先级

#define SUM(a,b) ((a)+(b))


//带语句的宏替换-->多行宏定义的写法

#define MAXAB(a,b) do{\

if (a > b)\

printf("Max=%d", a);\

else\

printf("Max=%d", b);    \

}while (0)

//do_while(0) 包含 含语句的宏




int main()

{

int  array[MAX] = { 0 };

INT  iNum = 1;

INFO mm = {"Love",100,1008,"上海"};

//M * 2

//1+2*2=5;

printf("%d\n", M * 2);

printf(type, Data);

int a = 1001;

int b = 1002;


SWAP(a, b);

printf("a=%d,b=%d\n", a, b);

float aa = 1.1f;

float bb = 1.2f;

SWAP(aa, bb);

//SWAP(1.11, 1.22);  替换后违背C语言基本准则

printf("sum=%d\n", 

SUM(1, 2) * 2);

MAXAB(a, b);

system("pause");

return 0;

}





二、条件编译(预处理)

#include <stdio.h>

#include <stdlib.h>

/*

1.宏替换

1.1 符号常量

1.2 可以替换任何东西

注意:宏替换不是语句 所以没有;

2.宏函数:带参数的宏替换

一定是参数带括号

*/

#define MAX 100//符号常量

#define INT  int

struct MM

{

char name[20];

int age;

int num;

char addr[20];

};

#define INFO struct MM

#define M 1+2

typedef int intData;

#define type "%s\t%d\t%d\t%s\n"

#define Data mm.name, mm.age, mm.num, mm.addr

//宏函数-->忽略类型去做处理

#define SWAP(a,b) (a)=(a)+(b),(b)=(a)-(b),(a)=(a)-(b)


//为什么加括号

//限制替换的计算的优先级

#define SUM(a,b) ((a)+(b))


//带语句的宏替换-->多行宏定义的写法

#define MAXAB(a,b) do{\

if (a > b)\

printf("Max=%d", a);\

else\

printf("Max=%d", b);    \

}while (0)

//do_while(0) 包含 含语句的宏




int main()

{

int  array[MAX] = { 0 };

INT  iNum = 1;

INFO mm = {"Love",100,1008,"上海"};

//M * 2

//1+2*2=5;

printf("%d\n", M * 2);

printf(type, Data);

int a = 1001;

int b = 1002;


SWAP(a, b);

printf("a=%d,b=%d\n", a, b);

float aa = 1.1f;

float bb = 1.2f;

SWAP(aa, bb);

//SWAP(1.11, 1.22);  替换后违背C语言基本准则

printf("sum=%d\n", 

SUM(1, 2) * 2);

MAXAB(a, b);

system("pause");

return 0;

}





三、#和##的作用

#include <stdio.h>

//## 主要用来做连接

#define SUM(a,b)  (a+b)  

#define NAME(x,y) x##y     //NAME(x,y)  xy

#define NUM(a)  info##a    //NUM(a)  ainfo

void print(int a)

{

printf("%d\n", a);

}

//#把代码转换为字符串

#define INFO(data) #data


int main()

{

printf("sum=%d\n", SUM(1, 2));

int info1 = 1005;

int info2 = 1003;

int info3 = 1001;

//NUM(a)  info3

print(NUM(3));//print(info3);

//NUM(a)  info2

print(NUM(2));//print(info2);

print(NUM(1));//print(info1);

printf("data=%s\n", INFO(123));

printf("data=%#d\n", 12345);

int xy;

NAME(x, y) = 10;  //xy=10

printf("xy=%d\n", xy);

system("pause");

return 0;

}



我知道你在看





新浪微博:@秀米XIUMI