c语言 实现编译器宏替换,编译预处理和宏

/*编译预处理指令

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)

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值