编译 & 预处理
编译(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 <名字> <值 ...
随机推荐
- Java DOM4J读取XML
DOM4J是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,採用了Java集合框架并全然支持DOM,SAX和JA ...
- C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容
内容简介 1.课程大纲 2.第一部分第四课第三章:变量的世界之显示变量内容 3.第一部分第五课预告:基本运算 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用 ...
- ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件
原文:ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件 第二章 继承于WebControl的自定义控件 到现在为止,我已经写了三篇关于自定义控件开发的文章,很感谢大家的支 ...
- OpenCV300 CMake生成project在项目过程中的问题
2015年6一个月4日本.OpenCV官网上面给出了最新版本号OpenCV.这是:3.0.0版本号,http://opencv.org/ 使用CMake它产生VS2010project流程.我遇到了一 ...
- 集成ejs和angular
我们也有一个系统angular用在应用中单页.正确angular做一些定制.集成seajs.不实用angular自己的模块管理. 只要angular也可单独使用在,一个较小的系统新开发,我不会用前js ...
- StackExchange.Redis 使用-同步 异步 即发即弃 (三)
访问单个服务器 有时候需要为单个服务器指定特定的命令 . IServer server = redis.GetServer("localhost", 6379); GetServe ...
- 【Leetcode】Partition List (Swap)
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- Swift 编程语言学习0.1——Swift简单介绍
有的时候,认为看英文文档有些费时,看中文文档怕翻译不准,有些地方确实不须要抠字眼.当有些地方假设翻译不精准会产生歧义,所以用这样对比的方式.顺便学习一下Swift. Swift is a new pr ...
- 024找到二维阵列(keep it up)
剑指offer在标题中:http://ac.jobdu.com/problem.php? pid=1384 题目描写叙述: 在一个二维数组中,每一行都依照从左到右递增的顺序排序.每一列都依照从上到下递 ...
- Git常用操作汇总(转)
如果一个文件被删除了,可以使用切换版本号进行恢复.恢复方法: 先确定需要恢复的文件要恢复成哪一个历史版本(commit),假设那个版本号是: commit_id,那么 git checkout com ...