#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#define PI 3.14#define M (a+b+c)/2#define f(x) x*x+x/5voidmain(){int a =10,b=5,c=15;printf("PI的值是%f\n", PI);//类对象宏,无参数宏printf("M结果是%d\n", M);//类对象宏,无参数宏printf("f(5)=%d\n",3*f(5));/*
*带参数宏(类函数宏) 注意,宏定义不同于函数,
*所以3*f(25)实际上等价于3*x*x+x/5而不是3*(x*x+x/)
*/}
宏定义并不是值传递,而是传递形参字符
宏定义的特殊用法,宏参数:#运算符
#include<stdio.h>#include<stdlib.h>#define PSQR(x) printf("the num : x = %d\n",x);#define PSQR_NEW(x) printf("the num : "#x" = %d\n",x);intmain(){int y =45;PSQR(y);//这时双引号内部的x是普通文本,不能被系统识别为变量,也就是不可改变PSQR_NEW(y);//可以看到,这时,x是一个宏形参,#x是转换为字符串"x"的形参名,这个过程叫做字符串化 return0;}
#include<stdio.h>#include<stdlib.h>#define PR(...) printf(__VA_ARGS__)intmain(){PR("HELLO WORLD\n");//传入一个参数,相当于写作:printf("HELLO WORLD\n")PR("HELLO! my name is %s,I am %d years old\n","Lala",18);//传入三个参数,相当于写作:"HELLO! my name is %s,I am %d years old\n", "Lala", 18)return0;}
运行结果
HELLO WORLD
HELLO! my name is Lala,I am 18 years old