编译 & 预处理
编译(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 <名字> <值 ...
随机推荐
- 【C语言探索之旅】 第一部分第七课:循环语句
内容简介 1.课程大纲 2.第一部分第七课: 循环语句 3.第一部分第八课预告: 第一个C语言小游戏 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编 ...
- Service Manager流程,派BC_REPLY,唤醒FregServer流程,返回BR_TRANSACTION_COMPLETE,睡眠等待proc->wait
本文參考<Android系统源代码情景分析>,作者罗升阳 一.service manager代码: -/Android/frameworks/base/cmd/service ...
- CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全) (转)
JDBC事务管理 Spring提供编程式的事务管理(Programmatic transaction manage- ment)与声明式的事务管理(Declarative transaction ma ...
- topshelf和quartz
topshelf和quartz内部分享 阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介 ...
- rabbitmq的java简单的实现
1,安装rabbitmq.我的是ubuntu14.04,在官网上面下载最新的安装文件http://www.rabbitmq.com/install-debian.html 2.安装完之后 启动rab ...
- MessageFormat类别:快速格式化字符串
MessageFormat 获取一组对象,格这些对象的类型,然后格串类型插入的地方的图案. 第一个样例使用静态的方法 MessageFormat.format.它在内部创建一个仅仅使用一次的 Mess ...
- (一)IE8以下background不起作用
最近遇到了些小bug,在这里做个记录分享下.低版本的浏览器不支持新属性或者说对代码的解析方式不一样,导致最后解析出来的结果五花八门,各种浏览器之间的兼容的确是一个令开发人员头疼的事情,不过有时候换一个 ...
- .NET单元测试艺术(1) - 单元测试的基本知识
List 1.1 一个要测试的SimpleParser类 using System; namespace AOUT.CH1.Examples { public class SimpleParser { ...
- 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架
这篇博客是hibernate学习的第一篇,主要简介hibernate框架,之后简单说一下hibernate的文件夹结构,最后写一个简单的hibernate实例.通过这三步来简单的认识一下hiberna ...
- POJ 1026 Cipher(更换)
Cipher Time Limit: 1000MS Memory Li ...