嵌入式培训学习历程第十七天

       预处理

  1.预处理规则  (在源程序编译之前,对程序进行加工)

      条件包含,展开宏,条件编译

  2.头文件包含的内容

      (1). 包含函数声明

      (2). 包含变量声明

      (3). 包含宏定义

      (4). 包含typedef

      (5). 嵌套include

  3.通用规则

    指令都以#开头

  4.变量的宏定义

      #define 宏名 替换列表

      注意:不添加 “;” 

         不可有额外符号

      拓展:只进行简单替换,不进行正确性检查

  5. #undef  取消宏定义

  6. 函数宏    节省内存

  7. 内联函数  (本质 :函数)

    定义: 是更好的宏

    关键字 :inline

    内联展开要求

          (1). 无递归

          (2). 无循环

          (3). 无复杂的条件分支语句

          (4). 代码量较少

  8.内联和宏的区别

      (1). 内联需要检查参数的正确性, 宏不检查

      (2). 内联不一定会被展开,宏一定会被展开

      (3). 内联展开在编译阶段,宏在预处理阶段

  9. 创建较长的宏

      使用do {}while(0)

      注意 :while(0)的后面没有“;”

  10.条件编译 :

    六个预处理指令 :#if,  #endif, #ifdef, #ifndef, #elif, #else

    一个运算符 :defined

    三种基本形式

      1. #if 常量表达式...#endif

      2.#ifdef DEBUG ... #endif

      3. #ifndef DEBUG ... #endif

    条件编译的作用

      (1). 调试开关

      (2). 头文件保护

    注意 :defined 测试某个宏是否被定义,是返回1, 否返回0

      #if与#endif 之间可以有多个#elif, 但#else只有一个

  这两天的英语: multiple(多数的)  definition(定义)  invalid(无效的)  suffix(后缀)  previous(以前的)

原文地址:https://www.cnblogs.com/cxw825873709/p/3246889.html