专题三 - 编译预处理.pdf
《专题三 - 编译预处理.pdf》由会员分享,可在线阅读,更多相关《专题三 - 编译预处理.pdf(49页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、版权声明版权声明版权声明版权声明:本课件及其印刷物本课件及其印刷物本课件及其印刷物本课件及其印刷物、视频的版权归成都国嵌信息技术有限公司所有视频的版权归成都国嵌信息技术有限公司所有视频的版权归成都国嵌信息技术有限公司所有视频的版权归成都国嵌信息技术有限公司所有,并保留所有权力并保留所有权力并保留所有权力并保留所有权力:任何单任何单任何单任何单位或个人未经成都国嵌信息技术有限公司书面授权位或个人未经成都国嵌信息技术有限公司书面授权位或个人未经成都国嵌信息技术有限公司书面授权位或个人未经成都国嵌信息技术有限公司书面授权,不得使用该课件及其印刷物不得使用该课件及其印刷物不得使用该课件及其印刷物不得使
2、用该课件及其印刷物、视频从事商业视频从事商业视频从事商业视频从事商业、教学活教学活教学活教学活动动动动。已经取得书面授权的已经取得书面授权的已经取得书面授权的已经取得书面授权的,应在授权范围内使用应在授权范围内使用应在授权范围内使用应在授权范围内使用,并注明并注明并注明并注明“来源来源来源来源:国嵌国嵌国嵌国嵌”。违反上述声明者违反上述声明者违反上述声明者违反上述声明者,我们将追究其我们将追究其我们将追究其我们将追究其法律责任法律责任法律责任法律责任。专题三专题三专题三专题三编译预处理编译预处理编译预处理编译预处理嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号:
3、 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116Contents编译过程简介编译过程简介编译过程简介编译过程简介宏定义与使用分析宏定义与使用分析宏定义与使用分析宏定义与使用分析条件编译使用分析条件编译使用分析条件编译使用分析条件编译使用分析#error和和和和#嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116Contents#pragma预处理分析预处理分析预处理分析预处理分析
4、#和和和和#运算符使用解析运算符使用解析运算符使用解析运算符使用解析嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116Contents编译过程简介编译过程简介编译过程简介编译过程简介宏定义与使用分析宏定义与使用分析宏定义与使用分析宏定义与使用分析条件编译使用分析条件编译使用分析条件编译使用分析条件编译使用分析#error和和和和#嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌
5、入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116被隐藏了过程被隐藏了过程被隐藏了过程被隐藏了过程? 你不知道的事你不知道的事你不知道的事你不知道的事。file.cfile.h预处理器cppfile.i编译器gccfile.s汇编器asfile.olibc.a链接器嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116编译器做了什么编译器做了什么编译器做了什么编译器做了什么?预编译预编译预编译预编译处理所有的注释处理所有的注
6、释处理所有的注释处理所有的注释,以空格代替以空格代替以空格代替以空格代替将所有的将所有的将所有的将所有的#define删除删除删除删除,并且展开所有的宏定义并且展开所有的宏定义并且展开所有的宏定义并且展开所有的宏定义处理条件编译指令处理条件编译指令处理条件编译指令处理条件编译指令#if, #ifdef, #elif, #else, #endif处理处理处理处理#include,展开被包含的文件展开被包含的文件展开被包含的文件展开被包含的文件保留编译器需要使用的保留编译器需要使用的保留编译器需要使用的保留编译器需要使用的#pragma指令指令指令指令预处理指令预处理指令预处理指令预处理指令:gc
7、c E file.c o 嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116编译器做了什么编译器做了什么编译器做了什么编译器做了什么?编译编译编译编译对预处理文件进行一系列词法分析对预处理文件进行一系列词法分析对预处理文件进行一系列词法分析对预处理文件进行一系列词法分析,语法分析和语义分析语法分析和语义分析语法分析和语义分析语法分析和语义分析词法分析主要分析关键字词法分析主要分析关键字词法分析主要分析关键字词法分析主要分析关键字,标示符标示符标示符
8、标示符,立即数等是否合法立即数等是否合法立即数等是否合法立即数等是否合法语法分析主要分析表达式是否遵循语法规则语法分析主要分析表达式是否遵循语法规则语法分析主要分析表达式是否遵循语法规则语法分析主要分析表达式是否遵循语法规则语义分析在语法分析的基础上进一步分析表达式是否合法语义分析在语法分析的基础上进一步分析表达式是否合法语义分析在语法分析的基础上进一步分析表达式是否合法语义分析在语法分析的基础上进一步分析表达式是否合法分析结束后进行代码优化生成相应的汇编代码文件分析结束后进行代码优化生成相应的汇编代码文件分析结束后进行代码优化生成相应的汇编代码文件分析结束后进行代码优化生成相应的汇编代码文件
9、编译指令编译指令编译指令编译指令:gcc S file.c o 嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116编译器做了什么编译器做了什么编译器做了什么编译器做了什么?汇编汇编汇编汇编汇编器将汇编代码转变为机器可以执行的指令汇编器将汇编代码转变为机器可以执行的指令汇编器将汇编代码转变为机器可以执行的指令汇编器将汇编代码转变为机器可以执行的指令每个汇编语句几乎都对应一条机器指令每个汇编语句几乎都对应一条机器指令每个汇编语句几乎都对应一条机器指令每
10、个汇编语句几乎都对应一条机器指令汇编指令汇编指令汇编指令汇编指令:gcc c file.s o 嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116源码单步编译示例源码单步编译示例源码单步编译示例源码单步编译示例理解编译器的行为理解编译器的行为理解编译器的行为理解编译器的行为实例分析实例分析实例分析实例分析1-嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流
11、学习交流学习交流学习交流QQ群群群群: 65212116链接器的意义链接器的意义链接器的意义链接器的意义连接器的主要作用是把各个模块之间相互引用的部分连接器的主要作用是把各个模块之间相互引用的部分连接器的主要作用是把各个模块之间相互引用的部分连接器的主要作用是把各个模块之间相互引用的部分处理好处理好处理好处理好,使得各个模块之间能够正确的衔接使得各个模块之间能够正确的衔接使得各个模块之间能够正确的衔接使得各个模块之间能够正确的衔接。嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交
12、流QQ群群群群: 65212116模块拼装模块拼装模块拼装模块拼装?静态链接静态链接静态链接静态链接file1.ofile2.olibc.a链接器嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116模块拼装模块拼装模块拼装模块拼装?动态链接动态链接动态链接动态链接file1.cfile1.olib1.so链接器linkera.out编译器嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌
13、入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116小结小结小结小结? 编译器将编译工作主要分为预处理编译器将编译工作主要分为预处理编译器将编译工作主要分为预处理编译器将编译工作主要分为预处理,编译和汇编三部编译和汇编三部编译和汇编三部编译和汇编三部? 连接器的工作是把各个独立的模块链接为可执行程序连接器的工作是把各个独立的模块链接为可执行程序连接器的工作是把各个独立的模块链接为可执行程序连接器的工作是把各个独立的模块链接为可执行程序? 静态链接在编译期完成静态链接在编译期完成静态链接在编译期完成静态链接在编译期完成,动态链接在运行期完成动态链接在运行期完成动态
14、链接在运行期完成动态链接在运行期完成嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116Contents编译过程简介编译过程简介编译过程简介编译过程简介宏定义与使用分析宏定义与使用分析宏定义与使用分析宏定义与使用分析条件编译使用分析条件编译使用分析条件编译使用分析条件编译使用分析#error和和和和#嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学
15、习交流学习交流QQ群群群群: 65212116定义宏常量定义宏常量定义宏常量定义宏常量? #define定义宏常量可以出现在代码的任何地方定义宏常量可以出现在代码的任何地方定义宏常量可以出现在代码的任何地方定义宏常量可以出现在代码的任何地方? #define从本行开始从本行开始从本行开始从本行开始,之后的代码都可以使用这个宏常量之后的代码都可以使用这个宏常量之后的代码都可以使用这个宏常量之后的代码都可以使用这个宏常量以上定义那些是正确的以上定义那些是正确的以上定义那些是正确的以上定义那些是正确的?那些是错误的那些是错误的那些是错误的那些是错误的?嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨
16、询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116定义宏表达式定义宏表达式定义宏表达式定义宏表达式? #define表达式给有函数调用的假象表达式给有函数调用的假象表达式给有函数调用的假象表达式给有函数调用的假象,却不是函数却不是函数却不是函数却不是函数? #define表达式可以比函数更强大表达式可以比函数更强大表达式可以比函数更强大表达式可以比函数更强大? #define表达式比函数更容易出错表达式比函数更容易出错表达式比函数更容易出错表达式比函数更容易出错以上宏表达式有没有问题以上宏表达式
17、有没有问题以上宏表达式有没有问题以上宏表达式有没有问题?完全等价于函数吗完全等价于函数吗完全等价于函数吗完全等价于函数吗?嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116宏代码块的定义宏代码块的定义宏代码块的定义宏代码块的定义宏强于函数的优势宏强于函数的优势宏强于函数的优势宏强于函数的优势实例分析实例分析实例分析实例分析2-嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式
18、Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116宏表达式与函数的对比宏表达式与函数的对比宏表达式与函数的对比宏表达式与函数的对比? 宏表达式在预编译期被处理宏表达式在预编译期被处理宏表达式在预编译期被处理宏表达式在预编译期被处理,编译器不知道宏表达式编译器不知道宏表达式编译器不知道宏表达式编译器不知道宏表达式的存在的存在的存在的存在? 宏表达式用宏表达式用宏表达式用宏表达式用“实参实参实参实参”完全替代形参完全替代形参完全替代形参完全替代形参,不进行任何运算不进行任何运算不进行任何运算不进行任何运算? 宏表达式没有任何的宏表达式没有任何的宏表达式没有任何的宏表达式没有
19、任何的“调用调用调用调用”开销开销开销开销? 宏表达式中不能出现递归定义宏表达式中不能出现递归定义宏表达式中不能出现递归定义宏表达式中不能出现递归定义嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116你见过你见过你见过你见过#undef吗吗吗吗?? 宏定义的常量或表达式是否有作用域限制宏定义的常量或表达式是否有作用域限制宏定义的常量或表达式是否有作用域限制宏定义的常量或表达式是否有作用域限制?example2-嵌入式嵌入式嵌入式嵌入式Linux技术
20、咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116强大的内置宏强大的内置宏强大的内置宏强大的内置宏1编译器是否遵循标准编译器是否遵循标准编译器是否遵循标准编译器是否遵循标准C规规规规范范范范_STDC_17:01:01编译时的时间编译时的时间编译时的时间编译时的时间_TIME_Jan 31 2012编译时的日期编译时的日期编译时的日期编译时的日期_DATE_25当前行号当前行号当前行号当前行号_LINE_file1.c被编译的文件名被编译的文件名被编译的文件名被编译的文件名_FILE_
21、示例示例示例示例含义含义含义含义宏宏宏宏嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116手把手教你写代码手把手教你写代码手把手教你写代码手把手教你写代码定义日志宏定义日志宏定义日志宏定义日志宏嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116课后思考课后思考课后思考课后思考?#define f (x)
22、 (x)-1)?上面的宏定义代表什么意思上面的宏定义代表什么意思上面的宏定义代表什么意思上面的宏定义代表什么意思??宏定义对空格敏感吗宏定义对空格敏感吗宏定义对空格敏感吗宏定义对空格敏感吗?宏宏宏宏“调用调用调用调用”对空格敏感吗对空格敏感吗对空格敏感吗对空格敏感吗?嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116Contents编译过程简介编译过程简介编译过程简介编译过程简介宏定义与使用分析宏定义与使用分析宏定义与使用分析宏定义与使用分析条件编
23、译使用分析条件编译使用分析条件编译使用分析条件编译使用分析#error和和和和#嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116基本概念基本概念基本概念基本概念? 条件编译的行为类似于条件编译的行为类似于条件编译的行为类似于条件编译的行为类似于C语言中的语言中的语言中的语言中的ifelse? 条件编译是预编译指示命令条件编译是预编译指示命令条件编译是预编译指示命令条件编译是预编译指示命令,用于控制是否编译某段代码用于控制是否编译某段代码用于控制是
24、否编译某段代码用于控制是否编译某段代码和和和和if语句真的有语句真的有语句真的有语句真的有区别吗区别吗区别吗区别吗?example3-嵌入式嵌入式嵌入式嵌入式Linux技术咨询技术咨询技术咨询技术咨询QQ号号号号: 550491596嵌入式嵌入式嵌入式嵌入式Linux学习交流学习交流学习交流学习交流QQ群群群群: 65212116#include的困惑的困惑的困惑的困惑? #include的本质是将已经存在的文件内容嵌入到当前文件中的本质是将已经存在的文件内容嵌入到当前文件中的本质是将已经存在的文件内容嵌入到当前文件中的本质是将已经存在的文件内容嵌入到当前文件中? #include的间接包含同
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专题三 编译预处理 专题 编译 预处理
限制150内