嵌入式C语言预处理及数组指针ppt课件.ppt

嵌入式C语言预处理及数组指针ppt课件.ppt

ID:59441226

大小:245.00 KB

页数:41页

时间:2020-09-18

嵌入式C语言预处理及数组指针ppt课件.ppt_第1页
嵌入式C语言预处理及数组指针ppt课件.ppt_第2页
嵌入式C语言预处理及数组指针ppt课件.ppt_第3页
嵌入式C语言预处理及数组指针ppt课件.ppt_第4页
嵌入式C语言预处理及数组指针ppt课件.ppt_第5页
资源描述:

《嵌入式C语言预处理及数组指针ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、常州工程职业技术学院计算机技术系嵌入式C语言预处理及数组指针仲启秀C预处理指令C语言指针、数组C语言内存管理本次课程的基本知识点1、C语言预处理1.1预处理概述作用:对源程序编译之前做一些处理,生成扩展C源程序种类宏定义#define文件包含#include条件编译#if--#else--#endif等特点:预处理指令总是占用源代码中的单独一行,并且总是以#字符和预处理指令名称开头且结尾不加分号。#字符的前面以及#字符与指令名称之间可以出现空白符。预处理命令可以放在程序中的任何位置,其有效范围是从定义处开始到文件结束位置。1.2

2、预处理指令预处理命令有三类:宏定义、文件包含和条件编译。宏定义:#define宏定义、#undef撤销宏定义文件包含:#include、#include”debug.h”条件编译:#if…#else(#elif)…#endif如果#if后面的常量表达式为true,则编译它与#endif之间的代码,否则跳过这些代码。#else(#elif)提供另外一种分支。#ifdef(#ifndef)…#endif意思是如果有定义”及“如果无定义”,是条件编译的另一种方法。#error编译程序时,只要遇到#error就会生成一

3、个编译错误提示消息,并停止编译#pragma,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作1.3宏定义不带参数宏定义一般形式:#define宏名[宏体]功能:用指定标识符(宏体)代替字符序列(宏名)定义位置:任意(一般在函数外面)作用域:从定义命令到文件结束#undef可终止宏名作用域格式:#undef宏名注意:宏展开:预编译时,用宏体替换宏名---不作语法检查引号中的内容与宏名相同也不置换宏定义中使用必要的括号()带参数的宏格式:#define标识符(形参表)形参表达式例:#defineS(a,b)  (a>b

4、)?(a):(b)功能:预处理程序将程序中出现的所有带实参的宏名,展开成由实参组成的表达式。使用注意:宏名与括号之间不可以有空格。有些参数表达式必须加括号,否则在实参表达式替时会出现错误。带参数宏与函数的区别:函数的形参与实参要求类型一致,而宏替换不要求类型。函数只有一个返回值,宏替换可能有多个结果。函数影响运行时间,宏替换影响编译时间。使用宏有可能给程序带来意想不到的副作用1.4条件编译形式1第一种形式:#ifdef标识符程序段1#else程序段2#endif它的功能是,如果标识符已被#define命令定义过则对程序段1进行编

5、译;否则对程序段2进行编译。形式2:#if常量表达式程序段1#else程序段2#endif它的功能是,如常量表达式的值为真(非0),则对程序段1进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。1.5#、##预算符(1)#预预算#defineSQR(x)printf("Thesquareofxis%d.",((x)*(x)))使用宏SQR(8);则输出为:Thesquareofxis64.注意到没有,引号中的字符x被当作普通文本来处理,而不是被当作一个可以被替换的语言符号。假如你确实希望在字符串中

6、包含宏参数,那我们就可以使用“#”,它可以把语言符号转化为字符串。#defineSQR(x)printf("Thesquareof#x"is%d.",((x)*(x)))SQR(8)则输出的是:Thesquareof8is64.很简单吧?相信你现在已经明白#号的使用方法了。(2)##粘合剂linkage.h:#defineSYMBOL_NAME_LABEL(X)X##:SYMBOL_NAME_LABEL(start)预处理后为start:gcc-DDEBUG-I./incl-Ecstruct.c-ocstruct.i1.6#

7、error、#line、#pragma(1)#error预处理编译器遇到#errormessage时显示message(不用双引号包围),并停止编译,一般多用在头文件里,与条件编译一起使用。例如:#if!defined(LVM_BLK_MAJOR)

8、

9、!defined(LVM_CHAR_MAJOR)#errorBadinclude/linux/major.h-LVMMAJORundefined#endif(2)#line预处理#line的作用是改变当前行数和文件名称,用的不多(3)#Pragma预处理它的作用是设定编译器的状态或

10、者是指示编译器完成一些特定的动作。用的不多,非常复杂,自学。#pragmamessage它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:#pragmamessage(“消息文本”)#pragmapack(n)按n字节对

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。