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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.预处理指令的定义('#'开头)
        再进行编译的第一遍扫描(词法扫描和语法分析)之前所做的工作。
        预处理指令包括:1)宏定义 2)文件包含 3)条件编译

2.宏替换的定义
        源程序在编译之前,由预处理程序对我们写的源代码进行处理,把源代码中所有出现宏名的地方使用宏字符串替换。

3.宏的使用注意
        1)作用域
                #define M 3 到#undef M
        2)字符串中宏名不被替换
                printf("M=%d",M);
        3)宏定义可以嵌套
                #define R 4
                #define pi 3.14
                #define AREA pi*R*R
        4)取别名
                #define INT int

4.有参宏的定义和使用
        #define 宏名(形参列表) 字符串

       
  1. #include <stdio.h>
  2. #define SUM(a) a+a
  3. int main(){
  4.         int r = SUM(3);
  5. return 0;
  6. }
  7. #intclude <stdio.h>
  8. #define M(x,y) x*y+x+y
  9. int main(){
  10.         int r = M(3,4);
  11. return 0;
  12. }
复制代码



        1)形参之前可以出现空格,宏名和参数之间不能出现空格
        2)字符串中每一个字符最好都用()括起来
         
  1. #include <stdio.h>
  2. #define M(x,y) x*y+x+y
  3. int main(){
  4.         int a=3r;
  5.         r=M(a+3,a-1);
  6.         //r=a+3*a-1+a+3+a-1;
  7.         //#define M(x,y) (x)*(y)+(x)+(y)
复制代码




5.条件编译
  1. #include <stdio.h>
  2. #define SCORE 76
  3. int main(){
  4. #if SCORE <60
  5.         printf("Range E");
  6. #elif SCORE <70
  7.         printf("Range D");
  8. #elif SCORE <80
  9.         printf("Range C");
  10. #elif SCORE <90
  11.         printf("Range B");
  12. #else
  13.         printf("Range A");
  14. #endif
  15.         return 0;
  16. }
复制代码


6.debug调试
  1. //DEBUG是系统使用的标示符,此处不能使用
  2. #define DEBUG 0
  3. #if DEBUG==1
  4. //显示调试信息
  5. #define Log(format,...)printf(format,##__VA_ARGS__))
  6. #else
  7. #define Log(format,...)
  8. #endif
  9. int main(){
  10.         Log(...);
  11.         return 0;
  12. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马