• C预处理器


    C预处理器

     

    目录

    • 概述
    • 文件包含
    • 宏替换
    • 条件包含

    概述

    预处理器是编译过程中单独执行的第一个步骤

    文件包含

    #include "文件名" / #include <文件名>

    注:

    文件包含将被替换为由文件名指定的文件内容

    如果某个包含文件的内容发生了变化,那么所有依赖于该包含文件的源文件都必须重新编译

    宏替换

    书写格式:#define 名字 替换文本

    注:

    宏定义若分成多行,此时需要在行末尾加上一个反斜杠符

    #define指令定义的名字的作用域从其定义点开始,到被编译的源文件的末尾处结束,宏定义中也可以使用前面出现的宏定义

    宏定义带参数

    要适当使用圆括号以保证计算次序的正确性

    #undef指令取消名字的宏定义

    举例

    #define max(A, B) ((A) > (B) ? (A) : (B))

    max(z+1)

    max(i++, j++) //将对每个参数执行两次自增操作

    常量的宏定义

    举例说明

    #define PI 3.14  //浮点类型

    #define doublePI 2*PI  //宏定义中可以使用先前定义过的宏

    注意事项

    在结尾不能使用“;”分号,否则会编译报错

    函数的宏定义

    带参函数的宏定义

    #define showText(number) printf("number is %d",number)

    给宏定义的函数增加一个参数作为函数的返回值

    #define getReturnValue(numA,numB,returnValue) if(numA>numB) returnValue = numA; else returnValue = numB;

    宏定义时如果想通过换行来提高代码的可读性,此时在行的末尾需要使用“ ”

    例如

    #define changedLine()

      if(10<20){

        printf("hello");

      }

    注意

    函数的宏定义是不可以有返回值的 

    函数宏不可以赋值给一个变量,例如:int a = macro(); 这种写法是错误的 

    宏定义的运用 

    把一些常用的变量或方法以宏定义的形式放在代码中,一方面可以提高代码的可读性(注意对宏的命名,让人能够一目了然这个宏是干什么用的),另一方面可以提高开发效率(不用重复定义一些常用的变量或方法)

    问题研究

    函数的宏定义在末尾是否要用”;“

    宏定义的函数传入的参数类型程序是怎么做判断的;

    条件包含

    #if、#endif、#elif(类似于else if)或#else

    #ifdef、#ifndef

    注:

    #if语句中可以使用表达式defined(名字),当名字已经定义时,其值为1;否则其值为0

    举例

    保证hdr.h文件的内容只被包含一次,避免多次重复包含同一文件

    #if !defined(HDR)

    #define HDR

    /* hdr.h文件的内容放在这里 */

    #endif

    改写:

    #ifndef HDR

    #define EDR

    /* hdr.h文件的内容放在这里 */

    #endif

    测试系统变量SYSTEM,根据该变量的值确定包含哪个版本的头文件

    #if SYSTEM == SYSV

      #define HDR "sysv.h"

    #elif SYSTEM == BSD

      #define HDR "bsd.h"

    #else

      #define HDR "default.h"

    #endif

    #include HDR

     

  • 相关阅读:
    OC MRC之循环引用问题(代码分析)
    OC MRC之 @property参数(代码分析)
    OC MRC之set方法内存管理(代码分析)
    OC MRC之多对象之间管理(代码分析)
    OC MRC之计数器的基本操作(代码分析)
    最流行的android组件大全
    Android主题切换方案总结
    Picasso – Android系统的图片下载和缓存类库
    Android无法导入下载好的项目(和Eclipse中已经存在的项目命名一样导致冲突)解决办法
    Android Studio 简单设置
  • 原文地址:https://www.cnblogs.com/IOS-Developer/p/4271039.html
Copyright © 2020-2023  润新知