/*编译预处理指令
1.#开头的是编译预处理指令
2.他们不是c语言的成分,但是C语言程
序是离不开他们
3.#define 用来定义一个宏
*/
//#include
//const double PI = 3.14159;
//#define PI 3.14159
//int main(int argc,char const *argv)
//{
//printf("%f\n",2*PI*3.0);
//return 0;
// }
/*
#define
#define
1.注意没有结尾的分号,因为不是C的语句
名字必须是一个单词,值可以是任何东西
2.在C语言的编译器开始编译之前,编译预处理程序(cpp)
会把程序中的名字换成值
3.完全的文本替换
宏
1.如果一个宏的值中有其他的宏的名字,也是会被替换的
2.如果一个宏的值超过一行,最后一行之前的行末需要加\
3.宏的值后面出现的注释是不会被当作宏的值得一部分
*/
//#include
//#define FORMAT "%f\n"
//#define PI 3.14159
//#define PI2 2*PI //PI*2
//#define PRT printf("%f",PI);\
//printf("%f\n",PI2);
//int main(int argc,char const *argv)
//{
//printf(FORMAT,PI2*3.0);
//PRT
//printf("%f\n",PI2*3.0);
//return 0;
// }
/* 预定义的宏 (左右两边下划线都是两个)
__LINE__ 源代码所在的行
__FILE__ 源代码的文件名
__DATE__ 编译时候的日期
__TIME__ 编译时候的时间
__STDC__
*/
//#include
//int main(int argc, char const *argv[])
//{
//printf("%s:%d\n",__FILE__,__LINE__);
//printf("%s,%s\n",__DATE__,__TIME__);
//return 0;
//}
/*
像函数的宏
#define cube(x) ((x)*(x)*(x))
宏可以带参数
*/
//#include
//#define cube(x) ((x)*(x)*(x))
//int main(int argc,char const *argv[])
//{
//int i;
//scanf("%d",&i);
//printf("%d\n",cube(i+2));
//return 0;
// }
//错误定义
//#define RADTODEG1(x) (x*57.29587)
//#define RADTODEG2(x) (x)*57.29587
//错误的定义
#include
#define RADTODEG1(x) (x*57.29587)
#define RADTODEG2(x) (x)*57.29587
int main(int argc,char const *argv[])
{
printf("%f\n",RADTODEG1(5+2));
printf("%f\n",180/RADTODEG2(1));
return 0;
}
/* 带参数的宏的原则
一切都要带括号
整个值要括号
参数出现的每个地方都要括号
#define RADTODEG(x) ((x)*57.29587)
*/