A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑白世界 中级黑马   /  2015-9-25 00:00  /  760 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

预处理命令分为三种:宏定义、条件编译、文件包含
关于预处理命令:
(1)所有预处理命令都以#开头,但是要注意,结尾都没有分号。
(2)预处理命令在编译之前完成。
(3)预处理命令也有作用域:在定义的那一行开始生效,知道文件结束,或者遇到#undef取消宏定义。
(4)宏名一般都用大写,或用k开头(k代表常量)

宏的作用:在编译之前,将所用的宏名替换成对应的值,但是并不负责计算(这是针对于有参数的宏定义)
1.不带参数的宏定义:
  1. #define num 500
  2. int main()
  3. {
  4.     int n = num;
  5.     int m = num + 55;
  6.     printf("n=%d\tm=%d\n",n,m);   //结果: n=500    m=555
  7.     return 0;
  8. }
复制代码

2.带参数的宏定义:
  1. #define  sum(v1,v2)  v1+v2    //这种写法其实并不正确,正确的写法应该是 #define  sum(v1,v2)  ((v1)+(v2))  后边详细解释
  2. int main()
  3. {
  4.     int a = 5;
  5.     int b = 6;
  6.     int c = sum(a,b);
  7.     printf("a+b=%d\n",c);   //结果:11
  8.     return 0;
  9. }
复制代码
需要注意的是:
    (1)宏定义只负责在变以前替换所有的宏名,并不负责运算。

    (2)宏定义是,值的写法:要先将参数

    (3)



3 个回复

倒序浏览
将上边补充完整:
    (2)宏定义是,值的写法:要先将参数都用括号括起来,在将结果用括号括起来。
             #difine  sum(v1,v2)  v1+v2
             int a = 3;
             int b = 4;
             int c = 2*sum(a,b);  //输出结果是10 并不是14
             原因:执行前替换:   int c = 2*sum(a,b) = 2*3+4 = 6+4 =10
                        我们想要的结果是: int c = 2*sum(a,b) = 2*(3+4) = 2*7 =14
            

    (3)使用带参数的宏定义要比使用函数效率高,所以一般的数学运算都建议写成宏定义而不是函数。
             比如求平方可以这样写:#define  pingfang(a)  ((a)*(a))
回复 使用道具 举报
我就拿你的笔记复习c吧,哈哈
回复 使用道具 举报
总结的好.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马