编译 & 预处理
编译(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 <名字> <值 ...
随机推荐
- 条形码/二维码之开源利器ZXing图文介绍(转)
继前面介绍的一个日本开源软件(该软件只能实现QRCode)原文: Java实现二维码QRCode的编码和解码(http://sjsky.iteye.com/blog/1136934 ),今发现又一优秀 ...
- python学习——编码
为了将各种不同的语言都包括在同一的字符集中,满足国际间的信息交流国际上制定了UNICODE字符集. 通过使用UNICODE字符集能够满足跨语言的文字处理,有效的避免乱码产生. 用法:在脚本中添加下面代 ...
- 使用JavaScript检测浏览器
假设你真的需要检测浏览器的类型,使用JavaScript非常easy达到. View Demo Download Source from GitHub JavaScript有一个navigator的标 ...
- tomcatserver乱码问题,tomcat与数据库之间的编码统一转换
在tomcat文件夹的conf文件夹下,改动server.xml文件,在以下截图中的位置加上URIEncoding="UTF-8"则表示tomcat编码转换为utf-8风格, 一般 ...
- cocos2d-x3.x屏蔽遮罩层屏蔽触摸button
cocos2d-x3.x触摸方法改变后,.屏蔽掉的层实际上触摸事件的非常easy,首先touchbegan一定要回true,第二,该事件被设定为听吞没触摸true.最近登录触摸水平必须低于0,现在,我 ...
- RestServer 1.1发布
具体配置方法参照第一版:http://www.cnblogs.com/devgis/p/4947191.html BUG反馈 QQ:80163278 邮箱:devgis@qq.com 淘宝:http: ...
- UVa 10012 - How Big Is It? 堆球问题 全排列+坐标模拟 数据
题意:给出几个圆的半径,贴着底下排放在一个长方形里面,求出如何摆放能使长方形底下长度最短. 由于球的个数不会超过8, 所以用全排列一个一个计算底下的长度,然后记录最短就行了. 全排列用next_per ...
- 新秀学习Hibernate——一个简单的例子
一个.Hibernate开发. 上篇博客已经为大家介绍了持久层框架的发展流程,持久层框架的种类. 为了可以使用Hibernate高速上手,我们先解说一个简单的Hibernate应用实例hibernat ...
- UVA 1364 - Knights of the Round Table (获得双连接组件 + 二部图推理染色)
尤其是不要谈了些什么,我想A这个问题! FML啊.....! 题意来自 kuangbin: 亚瑟王要在圆桌上召开骑士会议.为了不引发骑士之间的冲突. 而且可以让会议的议题有令人惬意的结果,每次开会前都 ...
- 前端插件@user
分享一个 @user 前端插件 开源地址:https://github.com/yuezhongxin/Mention.js 插件效果:类似于微博或 github 中 @user 列表效果. 这是 ...