编译 & 预处理
编译(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.
编译 & 预处理的更多相关文章
- Verilog学习笔记基本语法篇(十二)········ 编译预处理
h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...
- c语言编译预处理和条件编译执行过程的理解
在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令.预处理命令属于C语言编译器,而不是C语言的组成部分.通过预处理命令可扩展C语言程序设计的环境. 一.预处理的工作方式 1.1. ...
- 编译预处理 -- 带参数的宏定义--【sky原创】
原文:编译预处理 -- 带参数的宏定义--[sky原创] 如有转载请注明出处 编译预处理 -- 带参数的宏定义 前面为输出文件,后面为输入文件 gcc -E -o test.i test.c ...
- C++的编译预处理
C++中,在编译器对源程序进行编译之前,首先要由预处理对程序文本进行预处理.预处理器提供了一组预编译处理指令和预处理操作符.预处理指令实际上不是C++语言的一部分,它只是用来扩充C++程序设计的环境. ...
- C预编译, 预处理, C/C++头文件, 编译控制,
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...
- C语言条件编译及编译预处理阶段(转)
一.C语言由源代码生成的各阶段如下: C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中 编译预处理阶段,读取c源程序,对其中的 ...
- VerilogHDL编译预处理
编译预处理语句 编译预处理是VerilogHDL编译系统的一个组成部分,指编译系统会对一些特殊命令进行预处理,然后将预处理结果和源程序一起在进行通常的编译处理.以”`” (反引号)开始的某些标识符是编 ...
- 【转】C语言条件编译及编译预处理阶段
原文: http://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html 1. 宏定义(宏代换,宏替换,宏: 宏定义是C语言提供的3中预处理功能 ...
- C++——多文件结构和编译预处理命令
[toc] 一.多文件结构 1.一个工程可以划分为多个源文件 类声明文件(.h文件) 类实现文件(.cpp文件) 类的使用文件(main函数所在的.cpp文件) 2.利用工程来组合各个文件 //Poi ...
- C语言进阶——编译预处理指令
编译预处理指令 • #开头的是编译预处理指令 • 它们不是C语⾔的成分,但是C语⾔程序离不开它们 • #define⽤来定义⼀个宏 #define • #define <名字> <值 ...
随机推荐
- UVA305 - Joseph(数论 + 打表)
UVA305 - Joseph(数论 + 打表) 题目链接 题目大意:约瑟夫环问题:n个人围成一圈,每次都淘汰第m个人,问最后一个幸存下来的人的编号. 这题的意思有点不一样,它规定前面的k个人是好人, ...
- 开发一个Swing功能时的一点总结
对JTextField进行效验,有两个途径:(1)是使用javax.swing.InputVerifier在获取焦点时进行校验(2)在点击“确定”按钮的监听事件中对控件的值进行校验 鉴于涉及的业务比较 ...
- robot framework 使用三:他们主动浏览器的兼容性
robot framework 浏览器兼容性测试 上图中黄色圈的地方默认什么都不写,是firefox浏览器.写上ie就是ie浏览器了 firefox最新版本号即可,ie须要设置: 1. IE选项设置的 ...
- 顺序表----java实现
最简单的数据结构--顺序表,此处以数组为例. 顺序表的优点:支持随机读取,内存空间利用率高. 顺序表的缺点:1.需要预先给出最大数据元素个数,这往往很难实现. 2.插入和删除时需要移动大量数据. Se ...
- url参数中出现+、空格、=、%、&、#等字符的解决办法
url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...
- 系列三VisualSvn Server
原文:系列三VisualSvn Server VisualSvn Server介绍 1 .VisualSvn Server VisualSvn Server是免费的,而VisualSvn是收费的.V ...
- Binary Tree Inorder Traversal(转)
Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...
- Nio学习4——EchoServer在IO,NIO,NIO.2中的实现
堵塞IO实现: public class PlainEchoServer { public void serve(int port) throws IOException { final Server ...
- 理解git经常使用命令原理
git不同于类似SVN这样的版本号管理系统,尽管熟悉经常使用的操作就能够满足大部分需求,但为了在遇到麻烦时不至于靠蛮力去尝试,了解git的原理还是非常有必要. 文件 通过git管理的文件版本号信息所有 ...
- Team Foundation Server 2015使用教程--团队项目创建