zoukankan      html  css  js  c++  java
  • OC----预处理器

    OC编译器编译源代码的一般流程是:接收源文件,然后将它们转换为能够在目标平台上执行的文件
    包括:词法分析、语法分析、生成代码和优化、汇编与链接,最终生成二进制文件
     
    词法分析:源代码被拆分为多个记号,每个记号都是一个独立的元素
    语法分析:会检查正确语法的记号,并检查它们所构成表达式的合法性,
                  目的是:通过记号创建抽象语法树(AST)或层次分析树
    生成代码和优化:AST用于生成输出语言代码,输出语言可能是机器语言,也可能是中间语言表示(IR)
                           优化后代码的功能不会改变,但性能更好,体积更小
    汇编阶段:会接收上一处理阶段生成的代码,并将它们转换为在目标平台上可执行的机器代码
    链接阶段:汇编程序输出的一段或多段代码会被合并成 为一个独立的可执行程序
     
     
    预处理器是在词法分析阶段发挥作用的。
     
    预处理器根据一系列预定义的规则,使用一些字符串序列替换输入的字符序列
    操作顺序如下:
    1. 文本翻译:预处理器会先将输入的源文件拆分成代码行、使用单个字符替换三字母组合。将被断开的连续行合并为较长的代码行和使用单个空格替换注释。(三字母组合是指c语言中用来代表单个字符的三字符序列)
    2. 记号替换:预处理器将上一步骤处理过的代码转换为记号序列
    3. 基于与处理器语言的转换:如果记号序列中含有预处理语言元素,就会根据这些记号进行转换
     
    前两个操作是自动的,后一个是由添加到源文件中的预处理器语言函数执行的。
     
     
    预处理器语言:定义了预处理器指令和宏展开
     
    预处理器指令:
    头文件包含:#include 、#import
    区别:#import可以确保头文件仅在源文件中被包含一次,因而能够防止递归包含
     
    条件编译:#if、#else、#elif、#endif、#ifdef、#ifndef
     
    诊断:#error、#warning、#line
    • #error “错误消息”:
    通常用于处理条件编译错误,例如:
    #ifndef  INPUT_ARGS
    #error “No input arguments provided"
    #endif
    • #warning:指令可以生成编译时警告信息,但允许编译器继续进行编译
    • #line:指令可以在编译器消息中添加行号。当编译出错时,编译器会显示含有出错文件名称和相应行号
     
    #progma指令
    使用#progma指令可以设置超出OC语言范畴的、额外的编译器选项。
     
     
    宏是指:有名称的代码段,当在源代码中使用某个名称时,其代表的代码段就会替换它。
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    在Netty使用中TLSv1.3
    基本路径测试
    测试准备
    skywalking源码中添加日志代码并打印
    Java应用启动集成skywalking
    Logback获取全局唯一标识 traceid记录到日志中
    通过示例展示Byte Buddy 如何增强 log() 方法
    SpringIOC
    Flask 信号机制
    Django 信号机制
  • 原文地址:https://www.cnblogs.com/hqzxbb/p/4525919.html
Copyright © 2011-2022 走看看