编译(compilation , compile)

1、利用编译程序从源语言编写的源程序产生目标程序的过程。

2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。

  编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。

预处理(pre-treatment)

  定义:指在进行最后加工完善以前进行的准备过程,具体应用在不同的行业或领域,会有不同的解释。

预处理中会展开以#起始的行,试图解释为预处理指令(preprocessing directive)

  C/C++要求支持的包括#if/#ifdef/#ifndef/#else/#elif/#endif(条件编译)、#define(宏定义)、#include(源文件包含)、#line(行控制)、#error(错误指令)、#pragma(和实现相关的杂注)以及单独的#(空指令)。预处理指令一般被用来使源代码在不同的执行环境中被方便的修改或者编译。

================

1、使用#error和#pragma

  • 使用#error

  • #if A_SIZE < B_SIZE

  • #error  "Incompatible sizes"

  • #endif

  • 使用#pragma

  • #pragma    tokens

2、预处理指令

  • 条件编译

  • #if        constant_integral_expression

  • #ifdef     identifier

  • #endif     identifier

  • .

  • #undef     identifier

  • .

  • #if    0

  • more statements

  • #endif

  • and still more statements

  • .

  • // 等于else if(if-else结构)

  • #elif      constant_integral_expression

  • #else      ...

  • #endif     ...

  • .

  • 自定义NSLog

  • ex 1:

  • // 有DEBUG这个宏,代表需要显示Log;没有时,不需要显示Log。

  • #ifdef     DEBUG
    
    #define    MBLog(...)  NSLog(__VA_ARGS__)
    
    #else
    
    #define    MBLog(...)
    
    #endif
  • .

  • ex 2:

  • #defind    DEBUG   
    
    #if        DEBUG
    
        printf      ("debug: a = %d \n", a);
    
    #endif
  • .

  • ex 3:

  • ...

  • #undef     PIE
    
    #define    PIE     "I like apple."
  • ...

  • "#" 和 "##" 的使用

  • // "#"操作符,使参数被一对‘双引号’所包围!

  • // "#"使宏定义中的一个形式参数“字符串化” --> 相当于函数“传值”

  • .

  • #define    message_for(a, b)   \
    
             printf(#a " and " #b ": We love you! \n")
    
    int main(void)
    
    {
    
     message_for(Carole, Debra);
    
     ;
    
    }
    
    int main(void)
    
    {
    
     printf("Carole" " and " "Debra" ": We love you! \n");
    
     ;
    
    }
  • // " "被空格连接,自动拼接上去,即:Carole and Debra: We love you!

  • .

  • .

  • // 双目操作符"##",用于合并标记
    
    #define    X(i)  x ## i
    
    X() = X() = X();
    
    // 预处理后
    
    x1 = x2 = x3;
  • 导入系统中的命令行“clear”

int system(const char * string);

int main()
{
  system("clear");

  ;
}

3、注释

  • 使用 #error、#program、#wrong

  • #if A_SIZE < B_SIZE

  • #error  "Incompatible sizes"

  • #endif

  • .

  • .

  • #program marks - "Messages."      将方法分开(中间一根线)

  • #program mark "Messages."         未分,只为了方便查找

  • .

  • .

  • #wrong "Messages."

  • 各种注释方式

  • 0 |--> iOS编码中 <--|

  • .

    、 /// 和 /*...*/ 都是文件注释
    
    .Swift中注释:
    
    、 // MARK:       注释
    
    、 // TODO:       子注释
    
    、 // FIXME:      提示修改
    
    .
    
    、 // !!!:         提示
    
    、 // ???:        提示
  • .

  • .

  • 7、|--> 网页编码中 <--|

  • .

  • 7.1 注释标签用于在源文档中插入注释,注释会被浏览器忽略

  • .<!--

  • .#info {

  • .   "Message."

  • .}

  • .-->

  • 7.2 比较

  • .<!-- comment 会包含在最终生成的html文件中 -->

  • .<%-- comment 则不会包含 --%>

  • .

  • .

  • 8、|--> Terminal脚步编码 <--|

  • .

  • 8.1 # Unix风格单行注释

  • .

  • 8.2 " 终端配置时,注释

================

PS:

[ 每日一句 

人生有两条路,一条需要用心走,叫做梦想;一条需要用脚走,叫做现实

[ 每天一首英文歌 ]

" Roar " - Katy Perry

================

|-> GitHub: SpongeBob-GitHub

|--> Copyright (c) 2015 Bing Ma.

编译 & 预处理的更多相关文章

  1. Verilog学习笔记基本语法篇(十二)········ 编译预处理

    h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...

  2. c语言编译预处理和条件编译执行过程的理解

    在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令.预处理命令属于C语言编译器,而不是C语言的组成部分.通过预处理命令可扩展C语言程序设计的环境. 一.预处理的工作方式 1.1. ...

  3. 编译预处理 -- 带参数的宏定义--【sky原创】

    原文:编译预处理 -- 带参数的宏定义--[sky原创] 如有转载请注明出处   编译预处理  --  带参数的宏定义 前面为输出文件,后面为输入文件 gcc -E -o test.i test.c ...

  4. C++的编译预处理

    C++中,在编译器对源程序进行编译之前,首先要由预处理对程序文本进行预处理.预处理器提供了一组预编译处理指令和预处理操作符.预处理指令实际上不是C++语言的一部分,它只是用来扩充C++程序设计的环境. ...

  5. C预编译, 预处理, C/C++头文件, 编译控制,

    在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...

  6. C语言条件编译及编译预处理阶段(转)

    一.C语言由源代码生成的各阶段如下: C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中 编译预处理阶段,读取c源程序,对其中的 ...

  7. VerilogHDL编译预处理

    编译预处理语句 编译预处理是VerilogHDL编译系统的一个组成部分,指编译系统会对一些特殊命令进行预处理,然后将预处理结果和源程序一起在进行通常的编译处理.以”`” (反引号)开始的某些标识符是编 ...

  8. 【转】C语言条件编译及编译预处理阶段

    原文: http://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html 1. 宏定义(宏代换,宏替换,宏: 宏定义是C语言提供的3中预处理功能 ...

  9. C++——多文件结构和编译预处理命令

    [toc] 一.多文件结构 1.一个工程可以划分为多个源文件 类声明文件(.h文件) 类实现文件(.cpp文件) 类的使用文件(main函数所在的.cpp文件) 2.利用工程来组合各个文件 //Poi ...

  10. C语言进阶——编译预处理指令

    编译预处理指令 • #开头的是编译预处理指令 • 它们不是C语⾔的成分,但是C语⾔程序离不开它们 • #define⽤来定义⼀个宏 #define • #define <名字> <值 ...

随机推荐

  1. Build制作模型

    #include <iostream> using namespace std; //不知道为什么事实上非常好解释的东西在网上搞的人晕头转向的,下面是我的理解. //一个基类衍生出很多详细 ...

  2. 怎样用C#代码管理SharePoint解决方式

    怎样用C#代码管理SharePoint解决方式         本文我们将了解怎样用代码管理SharePoint解决方式.我们使用server端对象模型抽取解决方式.         SharePoi ...

  3. Adb shell得到root才干

    于Adb shell我们希望用一些文件系统文件夹时,经常有在没有痛苦Root才干,系统会提示su: Permission Denied. su不是每个手机有一个.能不能在这里下载: http://do ...

  4. Chapter 1 Securing Your Server and Network(7):禁用SQL Server Browse

    原文:Chapter 1 Securing Your Server and Network(7):禁用SQL Server Browse 原文出处:http://blog.csdn.net/dba_h ...

  5. 读书笔记之SQL注入漏洞和SQL调优

    原文:读书笔记之SQL注入漏洞和SQL调优 最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“' ...

  6. 算法 《霍纳的方法java实践》

    [历史背景] 霍纳的方法是中国南宋时期的数学家秦九韶表述求解一元高次多项式的值的算法--正负开方术. 它也能够配合牛顿法用来求解一元高次多项式的根.在西方被称作霍纳算法(Horner algorith ...

  7. 【转】window.scroll 浏览器滚动条的参数总结

    如内容超出单元格,则隐藏style="TABLE-LAYOUT: fixed" 让弹出窗口总是在最上面: <body onblur="this.focus();&q ...

  8. hdoj 2063 过山车 【双边匹配匈牙利算法】

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  9. Java Web整合开发(16) -- Struts 2.x 概述

    Struts2与Spring的整合 •Struts2框架为配合与Spring3框架进行整合,提供了相应的拦截器. •该组件名为StrutsSpringObjectFactory,位于struts2-s ...

  10. asp.net mvc实现rest风格返回json

    实现类似:http://localhost:1799/rest/person/1方式返回一个json内容: 在asp.net mvc中新建一个control rest,然后在其中新增方法: publi ...