02宏的使用
- 格式:docx
- 大小:25.10 KB
- 文档页数:12
c 宏定义用法
C语言中的宏定义是一种预处理指令,用于在编译之前将一些常量、函数、代码块等定义为一个标识符,方便代码的编写与管理。
宏定义的格式为:#define 标识符替换文本。
其中,标识符可以是任何合法的C语言标识符,替换文本可以是任何合法的C语句,包括常量、表达式、函数等。
宏定义有以下几种用法:
1. 定义常量:可以用宏定义来定义一些常量,例如#define PI 3.1415926,这样在代码中使用PI就相当于使用了常量3.1415926。
2. 定义函数:可以用宏定义来定义一些简单的函数,例如
#define ADD(a,b) (a+b),这样在代码中使用ADD(x,y)就相当于使用了函数x+y。
3. 定义代码块:可以用宏定义来定义一些代码块,例如#define SQUARE(x) (x*x),这样在代码中使用SQUARE(a)就相当于使用了a*a。
4. 定义条件编译:可以用宏定义来定义一些条件编译语句,例如#define DEBUG,这样在代码中使用#ifdef DEBUG和#endif就可以编写一些只在调试模式下才执行的代码。
需要注意的是,宏定义是一种简单的文本替换,因此可能会导致一些不可预期的问题,例如宏定义中的参数没有被正确使用时,就可能会导致编译错误或者逻辑错误。
同时,宏定义也不适用于一些复杂的操作,例如大量的循环、递归等,因为这可能会导致代码体积变大、可读性变差等问题。
因此,在使用宏定义时需要谨慎。
01 WPS OfficeChapterWPS Office简介WPS Office发展历程2005年,WPS Office2005发布,实现了对Microsoft Office文件格式的全面兼容。
2011年,WPS Office移动版上线,满足了用户在移动设备上的办公需求。
WPS Office功能特点文字处理表格制作演示文稿云服务跨平台支持02 WPSChapter文档基本操作新建文档打开文档保存文档文档导航01020304文字输入查找替换编辑功能拼写检查文字输入与编辑格式设置与排版提供丰富的字体、字号、字形等设置选项,满足用户不同的排版需求。
支持段落对齐、缩进、间距等设置,使文档排版更加美观。
内置多种样式模板,可快速应用到文档中,提高排版效率。
提供分栏、页边距、纸张大小等页面布局设置,满足用户不同的打印需求。
字体设置段落设置样式应用页面布局表格制作与处理01020304创建表格表格编辑表格样式数据处理03 WPSChapter新建表格打开表格保存表格关闭表格表格基本操作在单元格中直接输入数据,按Enter 键确认输入。
输入数据编辑数据批量输入数据格式设置双击单元格或按F2键进入编辑模式,修改数据后按Enter 键确认。
选中需要输入相同数据的多个单元格,输入数据后按Ctrl+Enter 键实现批量填充。
选中单元格或区域,通过“开始”选项卡中的工具设置字体、颜色、对齐方式等格式。
数据输入与编辑公式与函数应用输入公式引用单元格使用函数公式审核数据分析与可视化数据筛选数据排序数据可视化数据汇总使用“数据”选项卡中的分类汇总功能,对数据进行求和、平均值、计数等汇总操作。
04 WPSChapter演示文稿基本操作新建演示文稿保存演示文稿A B C D打开已有演示文稿关闭演示文稿在“开始”选项卡中,选择合适的幻灯片版式进行编辑。
选择幻灯片版式选择“设计”选项卡,为幻灯片设置背景颜色、背景图片或背景样式。
设置幻灯片背景在幻灯片中添加文本、图片、表格、图表等元素,并进行排版和美化。
家都在问宏程序~其实说起来宏就是用公式来加工零件的,比如说椭圆,如果没有宏的话,我们要逐点算出曲线上的点,然后慢慢来用直线逼近,如果是个光洁度要求很高的工件的话,那么需要计算很多的点,可是应用了宏后,我们把椭圆公式输入到系统中然后我们给出Z坐标并且每次加10um那么宏就会自动算出X坐标并且进行切削,实际上宏在程序中主要起到的是运算作用..宏一般分为A类宏和B类宏.A类宏是以G65 Hxx P#xx Q#xx R#xx的格式输入的,而B 类宏程序则是以直接的公式和语言输入的和C语言很相似在0i系统中应用比较广.由于现在B类宏程序的大量使用很多书都进行了介绍这里我就不再重复了,但在一些老系统中,比如法兰克OTD系统中由于它的MDI键盘上没有公式符号,连最简单的等于号都没有,为此如果应用B类宏程序的话就只能在计算机上编好再通过RSN-32接口传输的数控系统中,可是如果我们没有PC机和RSN-32电缆的话怎么办呢,那么只有通过A类宏程序来进行宏程序编制了,下面我介绍一下A类宏的引用;A类宏是用G65 Hxx P#xx Q#xx R#xx或G65 Hxx P#xx Qxx Rxx格式输入的xx的意思就是数值,是以um级的量输入的,比如你输入100那就是0.1MM~~~~~.#xx就是变量号,关于变量号是什么意思再不知道的的话我也就没治了,不过还是教一下吧,变量号就是把数值代入到一个固定的地址中,固定的地址就是变量,一般OTD系统中有#0~~~#100~#149~~~#500~#531关闭电源时变量#100~#149被初始化成“空”,而变量#500~#531保持数据.我们如果说#100=30那么现在#100地址内的数据就是30了,就是这么简单.好现在我来说一下H代码,大家可以看到A类宏的标准格式中#xx和xx都是数值,而G65表示使用A类宏,那么这个H就是要表示各个数值和变量号内的数值或者各个变量号内的数值与其他变量号内的数值之间要进行一个什么运算,可以说你了解了H代码A类宏程序你基本就可以应用了,好,现在说一下H代码的各个含义: 以下都以#100和#101和#102,及数值10和20做为例子,应用的时候别把他们当格式就行, 基本指令:H01赋值;格式:G65H01P#101Q#102:把#102内的数值赋予到#101中G65H01P#101Q#10:把10赋予到#101中H02加指令;格式G65 H02 P#101 Q#102 R#103,把#102的数值加上#103的数值赋予#101 G65 H02 P#101 Q#102 R10G65 H02 P#101 Q10 R#103G65 H02 P#101 Q10 R20上面4个都是加指令的格式都是把Q后面的数值或变量号内的数值加上R后面的数值或变量号内的数值然后等于到P后面的变量号中.H03减指令;格式G65 H03 P#101 Q#102 R#103,把#102的数值减去#103的数值赋予#101G65 H03 P#101 Q#102 R10G65 H03 P#101 Q10 R#103G65 H03 P#101 Q20 R10上面4个都是减指令的格式都是把Q后面的数值或变量号内的数值减去R后面的数值或变量号内的数值然后等于到P后面的变量号中.H04乘指令;格式G65 H04 P#101 Q#102 R#103,把#102的数值乘上#103的数值赋予#101G65 H04 P#101 Q#102 R10G65 H04 P#101 Q10 R#103G65 H04 P#101 Q20 R10上面4个都是乘指令的格式都是把Q后面的数值或变量号内的数值乘上R后面的数值或变量号内的数值然后等于到P后面的变量号中.H05除指令;格式G65 H05P#101 Q#102 R#103,把#102的数值除以#103的数值赋予#101G65 H05 P#101 Q#102 R10G65 H05 P#101 Q10 R#103G65 H05 P#101 Q20 R10上面4个都是除指令格式都是把Q后面的数值或变量号内的数值除以R后面的数值或变量号内的数值然后等于到P后面的变量号中.(余数不存,除数如果为0的话会出现112报警)三角函数指令:H31 SIN正玄函数指令:格式G65 H31 P#101 Q#102 R#103;含义Q后面的#102是三角形的斜边R后面的#103内存的是角度.结果是#101=#102*SIN#103,也就是说可以直接用这个求出三角形的另一条边长.和以前的指令一样Q和R后面也可以直接写数值.H32 COS余玄函数指令:格式G65 H32 #101 Q#102 R#103;含义Q后面的#102是三角形的斜边R后面的#103内存的是角度.结果是#101=#102*COS#103,也就是说可以直接用这个求出三角形的另一条边长.和以前的指令一样Q和R后面也可以直接写数值.H33和H34本来应该是TAN 和ATAN的可是经过我使用得数并不准确,希望有知道的人能够告诉我是为什么?开平方根指令:H21;格式G65 H21 P#101 Q#102 ;意思是把#102内的数值开了平方根然后存到#101中(这个指令是非常重要的如果在车椭圆的时候没有开平方跟的指令是没可能用宏做到的.无条件转移指令:H80;格式:G65 H80 P10 ;直接跳到第10程序段有条件转移指令:H81 H82 H83 H84 H85 H86 ,分别是等于就转的H81;不等于就转的H82;小于就转的H83;大于就转的H84;小于等于就转的H85;大于等于就转的H86;格式:G65 H8x P10 Q#101 R#102;将#101内的数值和#102内的数值相比较,按上面的H8x的码带入H8x中去,如果条件符合就跳到第10程序段,如果不符合就继续执行下面的程序段.用户宏程序能完成某一功能的一系列指令像子程序那样存入存储器,用一个总指令来它们,使用时只需给出这个总指令就能执行其功能。
前言我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。
而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA 函数,以供大家学习参考。
第1.1例 ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII 值。
二、代码:Sub 示例_1_01()Dim myNum1%, myNum2%myNum1 = Asc("Excel") '返回69myNum2 = Asc("e") '返回101[a1] = "myNum1= ": [b1] = myNum1[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、Sub 示例_1_01():宏程序的开始语句。
2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为 Dim myNum1 As Integer 。
Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。
Integer 的类型声明字符是百分比符号 (%)。
3、myNum1 = Asc("Excel"):把Asc函数的值赋给变量myNum1。
Asc函数返回一个 Integer,代表字符串中首字母的字符的ASCII代码。
语法Asc(string)必要的 string(字符串)参数可以是任何有效的字符串表达式。
如果 string 中没有包含任何字符,则会产生运行时错误。
4、myNum2 = Asc("e"):把Asc函数的值赋给变量myNum2。
宏程序大家都在问宏程序~其实说起来宏就是用公式来加工零件的,比如说椭圆,如果没有宏的话,我们要逐点算出曲线上的点,然后慢慢来用直线逼近,如果是个光洁度要求很高的工件的话,那么需要计算很多的点,可是应用了宏后,我们把椭圆公式输入到系统中然后我们给出Z坐标并且每次加10um那么宏就会自动算出X坐标并且进行切削,实际上宏在程序中主要起到的是运算作用..宏一般分为A类宏和B类宏.A类宏是以G65 Hxx P#xx Q#xx R#xx的格式输入的,而B类宏程序则是以直接的公式和语言输入的和C语言很相似在0i系统中应用比较广.由于现在B类宏程序的大量使用很多书都进行了介绍这里我就不再重复了,但在一些老系统中,比如法兰克O TD系统中由于它的M DI键盘上没有公式符号,连最简单的等于号都没有,为此如果应用B类宏程序的话就只能在计算机上编好再通过RSN-32接口传输的数控系统中,可是如果我们没有PC机和RSN-32电缆的话怎么办呢,那么只有通过A类宏程序来进行宏程序编制了,下面我介绍一下A类宏的引用; A类宏是用G65 Hxx P#xx Q#xx R#xx或G65 Hxx P#xx Qxx Rxx格式输入的xx的意思就是数值,是以um级的量输入的,比如你输入100那就是0.1MM~~~~~.#xx就是变量号,关于变量号是什么意思再不知道的的话我也就没治了,不过还是教一下吧,变量号就是把数值代入到一个固定的地址中,固定的地址就是变量,一般OTD系统中有#0~~~#100~#149~~~#500~#531关闭电源时变量#100~#149被初始化成“空”,而变量#500~#531保持数据.我们如果说#100=30那么现在#100地址内的数据就是30了,就是这么简单.好现在我来说一下H代码,大家可以看到A类宏的标准格式中#xx和xx都是数值,而G65表示使用A类宏,那么这个H就是要表示各个数值和变量号内的数值或者各个变量号内的数值与其他变量号内的数值之间要进行一个什么运算,可以说你了解了H代码A类宏程序你基本就可以应用了,好,现在说一下H代码的各个含义: 以下都以#100和#101和#102,及数值10和20做为例子,应用的时候别把他们当格式就行, 基本指令: H01赋值;格式:G65H01P#101Q#102:把#102内的数值赋予到#101中G65H01P#101Q#10:把10赋予到#101中H02加指令;格式G65H02 P#101 Q#102 R#103,把#102的数值加上#103的数值赋予#101 G65 H02 P#101 Q#102 R10 G65 H02 P#101 Q10 R#103 G65 H02 P#101 Q10 R20 上面4个都是加指令的格式都是把Q后面的数值或变量号内的数值加上R后面的数值或变量号内的数值然后等于到P后面的变量号中. H03减指令;格式G65H03 P#101 Q#102 R#103,把#102的数值减去#103的数值赋予#101 G65 H03 P#101 Q#102 R10 G65 H03 P#101 Q10 R#103 G65 H03 P#101 Q20 R10 上面4个都是减指令的格式都是把Q后面的数值或变量号内的数值减去R后面的数值或变量号内的数值然后等于到P后面的变量号中. H04乘指令;格式G65H04 P#101 Q#102 R#103,把#102的数值乘上#103的数值赋予#101 G65 H04 P#101 Q#102 R10 G65 H04 P#101 Q10 R#103 G65 H04 P#101 Q20 R10 上面4个都是乘指令的格式都是把Q后面的数值或变量号内的数值乘上R后面的数值或变量号内的数值然后等于到P后面的变量号中. H05除指令;格式G65H05P#101 Q#102 R#103,把#102的数值除以#103的数值赋予#101 G65 H05 P#101 Q#102 R10 G65 H05 P#101 Q10 R#103 G65 H05 P#101 Q20 R10 上面4个都是除指令格式都是把Q后面的数值或变量号内的数值除以R后面的数值或变量号内的数值然后等于到P后面的变量号中.(余数不存,除数如果为0的话会出现112报警) 三角函数指令: H31 SIN正玄函数指令:格式G65H31 P#101 Q#102 R#103;含义Q后面的#102是三角形的斜边R后面的#103内存的是角度.结果是#101=#102*SIN#103,也就是说可以直接用这个求出三角形的另一条边长.和以前的指令一样Q和R后面也可以直接写数值. H32 COS余玄函数指令:格式G65H32 #101 Q#102 R#103;含义Q后面的#102是三角形的斜边R后面的#103内存的是角度.结果是#101=#102*COS#103,也就是说可以直接用这个求出三角形的另一条边长.和以前的指令一样Q和R后面也可以直接写数值. H33和H34本来应该是TAN和ATAN的可是经过我使用得数并不准确,希望有知道的人能够告诉我是为什么? 开平方根指令: H21;格式G65H21 P#101 Q#102 ;意思是把#102内的数值开了平方根然后存到#101中(这个指令是非常重要的如果在车椭圆的时候没有开平方跟的指令是没可能用宏做到的. 无条件转移指令: H80;格式:G65 H80 P10 ;直接跳到第10程序段有条件转移指令: H81 H82 H83 H84 H85 H86 ,分别是等于就转的H81;不等于就转的H82;小于就转的H83;大于就转的H84;小于等于就转的H85;大于等于就转的H86;格式:G65 H8x P10 Q#101 R#102;将#101内的数值和#102内的数值相比较,按上面的H8x的码带入H8x中去,如果条件符合就跳到第10程序段,如果不符合就继续执行下面的程序段. 用户宏程序能完成某一功能的一系列指令像子程序那样存入存储器,用一个总指令来它们,使用时只需给出这个总指令就能执行其功能。
宏命令全表本文WOWWiki共享维护Subelf译有些命令需要参数,而部分命令的参数则是可以省略的。
比如〃。
山可以接受两个参数,一个是可选的,另一个则是必需的,我们用/join〈频道名称〉[密码]来表示。
也就是说中的是必需的,“口”中的则是可选的。
,基本命令]?,/h」help显示帮助信息。
协助[单位],也就是选择[单位]的目标。
如果没有指定[单位],当前目标将作为参数。
/camp, /logout准备返回人物选择,出现等待20秒的提示。
如果在旅店或主城则直接返回。
使用〈技能/combatlog切换战斗记录方式,将其写入磁盘。
/dismount解散坐骑。
为自己装备〈物品3.10新增双天赋系统,用编号1或2来选择天赋。
/exit, /quit准备退出游戏,出现等待20秒提示。
如果在旅店或主城则直接退出。
自动跟随[玩家]。
如果没有指定[玩家],当前目标将作为参数。
观察[玩家]。
加果没有指定[玩家],当前目标将作为参数。
/played查看总游戏时间。
掷骰子,获得一个[下限]到[上限]之间的随机数。
如果只指定了一个参数值,那么范围就是从1到这个指定的值。
如果没有给出任何参数,那么范闱就是从1 到100o如果你在小队或团队中,附近的队员可以看到你得到的随机数,范闱和/say 相同。
/tar, /target <单位〉将指定〈单位>设为当前目标。
参见《单位标识和time显示服务器时间。
/tr, /trade [玩家]向[玩家]发起交易。
如果没有指定[玩家],当前目标将作为参数。
/use〈物品〉根据指定内容进行在线玩家搜索,搜索结果将显示在聊天窗11中。
如果没有指定[搜索内容],那么会进行一个默认的搜索,并打开搜索对话框显示结果。
二、聊天命令下面这些是用于玩家交流的命令,如果没有特别设定,聊天内容都是用当前的语.发送的。
比如暗夜精灵选择用达纳苏斯语后人类就看不懂他说的是什么了。
佗,/em, /emote, /me〈表情》表情的作用是向周围发送一个“玩家名〈表情〉”的信息,和/say类似。
G代码 分组 功能*G00 01 定位(快速移动)*G01 01 直线插补 (进给速度) G02 01 顺时针 圆弧插补G03 01 逆时针圆弧 插补G04 00 暂停,精确停止G09 00 精确停止*G17 02 选择X Y平面G18 02 选择Z X平面G19 02 选择Y Z平面G27 00 返回并检查参考点G28 00 返回参考点G29 00 从参考点返回G30 00 返回第二参考点*G40 07 取消 刀具半径补偿G41 07 左侧 刀具 半径补偿G42 07 右侧刀具半径补偿G43 08 刀具长度补偿 +G44 08 刀具长度补偿-*G49 08 取消刀具长度补偿G52 00 设置局部 坐标系G53 00 选择 机床坐标系*G54 14 选用1号 工件坐标系G55 14 选用2号工件坐标系G56 14 选用3号工件坐标系G57 14 选用4号工件坐标系G58 14 选用5号工件坐标系G59 14 选用6号工件坐标系G60 00 单一方向定位G61 15 精确停止方式*G64 15 切削方式G65 00 宏程序 调用G66 12 模态宏程序调用*G67 12 模态宏程序调用取消G73 09 深孔钻 削固定循环G74 09 反螺纹 攻丝 固定循环 G76 09 精镗固定循环*G80 09 取消固定循环G81 09 钻削固定循环G82 09 钻削固定循环G83 09 深孔钻削固定循环G84 09 攻丝固定循环G85 09 镗削 固定循环G86 09 镗削固定循环G87 09 反镗固定循环G88 09 镗削固定循环G89 09 镗削固定循环*G90 03 绝对值 指令方式*G91 03 增量值指令方式G92 00 工件零点设定*G98 10 固定循环返回初始点G99 10 固定循环返回R点G代码被分为了不同的组,这是由于大多数的G代码是模态的,所谓模态G代码,是指这些G代码不只在当前的程序段中起作用,而且在以后的程序段中一直起作用,直到程序中出现另一个同组的G代码为止,同组的模态G代码控制同一个目标但起不同的作用,它们之间是不相容的。
excel表格宏怎么用篇一:手动启用excel表宏的操作方法手动启用Excel表“宏”的操作方法本文以微软Office Excel 2019 为例,截图说明主要操作步骤,不排除不同版本在操作略有差异,请自行百度了解。
1、打开Excel表格文件后,点击“文件”菜单项,选择“选项”即可。
如下图:2、在打开的界面上,选择“信任中心”栏目,再点击“信任中心设置”,如下图:3、进入“信任中心”界面后,选择“宏设置”栏目,再选择左侧最后一项“启用所有宏”,最后点击界面底部“确定”即可。
4、回到Excel表格界面,先执行一下保存,接着关闭后再重新打开一次,就可以了。
篇二:EXCEL表格宏的应用EXCEL表格一、宏宏是什么?宏主要用来处理有规律的重复的工作,相当于批处理。
excel宏怎么用?单击工具→宏→录制新宏→然后指定一个快捷键(如L,相当于ctrl L快捷键),然后指定、关闭。
开始录制宏。
把你能够重复的操作执行一下,以计算机能识别的重复为准。
然后→工具→宏→停止录制。
这样宏就录制出来了。
excel宏怎么用第一:在Excel 2019中如何快速录制宏默认状态下,Excel 2019的状态栏会显示一个“录制宏”按钮(在状态栏上单击右键→勾选“宏录制”),单击在弹出的对话框中输入宏名-〉确定,即可开始录制宏。
录制完毕,再次单击下面的按钮即可。
然后按ALT+F11,进入VBE,查看录制的代码。
excel宏怎么用第二:Excel录制宏功能不支持哪些操作?Excel不可以录制形状、图片、Smartart等相关操作的宏,但是可以录制剪贴画、签名行、图表等相关操作的宏。
excel宏怎么用第三:如何在Excel2019启用宏单击Office按钮→Excel选项→信任中心→“信任中心设置”按钮。
在“信任中心”对话框中选择“宏设置”→“启用所有宏”。
excel宏怎么用第四:Excel2019中如何加载宏单击Office按钮→Excel选项→加载项→选择“Excel加载项”,单击“转到”按钮。
c/c++宏的使用总结“宏”是借用汇编语言中的概念。
为的是在C语言程序中方便的作一些定义和扩展。
这些语句以#define开头,分为两种:符号常量的宏定义和带参数的宏定义。
掌握"宏"概念的关键是“换”。
一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。
即在对相关命令或语句的含义和功能作具体分析之前就要换,“不管三七二十一,先换了再说”。
那么剩下的问题就简单了:1 把谁换掉?2 换成什么?#define PI 3.1415926把程序中出现的PI全部换成3.1415926li9_1.c说明:(1)宏名一般用大写(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。
例如:数组大小常用宏定义(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
(6)可以用#undef命令终止宏定义的作用域(7)宏定义可以嵌套li9_2.c(8)字符串""中永远不包含宏(9)宏定义不分配内存,变量定义分配内存。
1.符号常量的宏定义和宏替换符号常量的宏定义语句是一般格式:#define 标识符字符串#define PI 3.1415926其中标识符就叫作宏名称。
注意:标识符与字符串之间不要用‘=’,结尾不要加‘;’。
2.带有参数的宏定义及其替换复杂的宏定义带有参数列表,参数列表中可有不止一个参数,其一般格式:#define 标识符(参数列表) 字符串对带有参数的宏定义进行宏替换时,不仅对宏标识符作字符串替换,还必须作参数的替换。
除了一般的字符串替换,还要做参数代换格式:#define 宏名(参数表)字符串例如:#define S(a,B) a*barea=S(3,2);第一步被换为area=a*b;,第二步被换为area=3*2;3.宏定义类函数宏定义常用于把直接插入的代码来代替函数,以提高执行效率。
这一类的宏,就称做宏定义类函数,例如:#define MIN(x,y) (((x)<(y))?(x):(y))有了这样的宏之后,就可以直接引用,例如:m=MIN(a,B);这语句将被预处理成:m=(((a)<(B))?(a):(B));7.3文件包含文件包含是指一个程序文件将另一个指定义文件的内容包含进来,用#include 语句来说明。
一般有两种格式:(1) #include <文件名>(2) #include ″文件名″第一种,用尖括号表示在标准库目录下找该文件;第二种,用双引号表示先在当前目录(源文件所在目录)中找包含文件,若找不到,再到标准库目录中找。
系统的标准库文件都是.h文件。
例如:#include <stdio.h> /* 标准输入输出的基本常量和宏或函数文件 */#include <string.h> /* 串函数文件 */#include <malloc.h> /* 内存分配函数文件 */#include <ctype.h> /* 字符函数文件 */#include <math.h> /* 数学函数库文件 */用文件包含,可以减少重复工作,提高程序正确性,还便于维护修改。
程序员可以把自己常用的一些符号常量、类型定义和带参数的宏定义,以及一些常用自编函数都放在.h文件中,通过#include语句包含引用之。
7.4条件编译提供条件编译措施使同一源程序可以根据不同编译条件(参数)产生不同的目录代码,其作用在于便于调试和移植。
条件编译控制语句有不同形式,下面分别讨论。
1.#ifdef语句及其使用一般格式:#ifdef 标识符语句块1#else语句块2#endif7.4格式化输入/输出格式化的控制台I/O函数有两种,它们都与标准I/O库有关。
源程序开头应包含标准输入输出头文件:#include <stdio.h>1.printf()printf()函数功能为按指定格式输出显示各种基本类型数据,其一般格式:printf(“控制串”,参数列表)控制串分两部分,即:要显示的字符和格式串。
格式串以“%”开头,后跟格式码。
格式串与参数一一对应。
2.scanf()scanf()的功能是读入各种类型数据,并自动将其转换为恰当的格式,其一般格式为:scanf(“控制串”,参数列表)控制串与前述printf()中的控制串类似,也包含有以“%”开头加格式码组成的格式串。
参数列表所列出的应当是变量的地址,而不是变量名。
在这里总结宏的使用方法欢迎补充1 条件include如下CODE#ifndef MAIN_H_#define MAIN_H_其它内容#endif上面在看到头文件时会看到作用就是阻止这个头文件被多次include多次include就会出现重复的定义情况所以需要在每个头文件中都使用这个定义如果还不是很了解要怎样使用可以看看 c的标准头文件如fcntl.h2 条件编译如下CODE#ifdef _DEBUGprintf("this debug info\n");#endif如果没有定义_DEBUG宏的话那么上面那一行是不会编译进去的但是定义了_DEBUG后上面那行就会编译进去可以写个简单的程序测试CODE#include <stdio.h>int main(){#ifdef _DEBUGprintf("hello world\n");#elseprintf("no debug");#endifreturn 0;第一次使用 gcc -D_DEBUG main.c第二次使用 gcc main.c运行两次的结果看3 定义为某个值以便后面修改这个值时不用修改其它地方代码只要修改这个宏的定义就可以了如一个软件的多语言版本等如下CODE#include <stdio.h>#define PRINT_STR "你好 DD"main(){printf(PRINT_STR);return 0;}编译时会把PRINT_STR代替成"你好 DD"以后想修改时就方便了另外也可以定义为函数#include <stdio.h>#ifdef _DEBUG#define A(x) a(x)#else#define A(x) b(x)#endifint a(int x){return x+1;}int b(int x){return x+100;}int main(){printf ("A(10) value is %d",A(10));return 0;}[/code]其实也可以定义成#define A a的但是定义成A(x)后只有A后面带一个(x)类型的编译器才会执行替换比较安全可以保证只替换函数而不替换变量3可变参数宏有些时候定义一个宏来代替某个函数但是这个函数是可变参数的话那就需要考虑办法了定义方法如下CODE#define PRINT(...) printf(__VA_ARGS__)#include <stdio.h>int main(){PRINT("%d %s %s",1,"吃饭了吗 smile MM:)","\n");return 0;}第九章预处理命令预处理的概念:编译之前的处理C的预处理主要有三个方面的内容:宏定义、文件包含、条件编译预处理命令以符号“#”开头。
9.1 宏定义9.1.1 不带参数的宏定义宏定义又称为宏代换、宏替换,简称“宏”格式:#define 标识符字符串其中的标识符就是所谓的符号常量,也称为“宏名”预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
掌握"宏"概念的关键是“换”。
一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。
即在对相关命令或语句的含义和功能作具体分析之前就要换,“不管三七二十一,先换了再说”。
那么剩下的问题就简单了:1 把谁换掉?2 换成什么?#define PI 3.1415926把程序中出现的PI全部换成3.1415926li9_1.c说明:(1)宏名一般用大写(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。
例如:数组大小常用宏定义(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
(6)可以用#undef命令终止宏定义的作用域(7)宏定义可以嵌套li9_2.c(8)字符串""中永远不包含宏(9)宏定义不分配内存,变量定义分配内存。
9.1.2 带参数的宏除了一般的字符串替换,还要做参数代换格式:#define 宏名(参数表)字符串例如:#define S(a,B) a*barea=S(3,2);第一步被换为area=a*b;,第二步被换为area=3*2;类似于函数调用,有一个哑实结合的过程li9_3.c(1)实参如果是表达式容易出问题#define S® r*rarea=S(a+B);第一步换为area=r*r;,第二步被换为area=a+b*a+b;正确的宏定义是#define S® ®*®(2)宏名和参数的括号间不能有空格(3)宏替换只作替换,不做计算,不做表达式求解(4)函数调用在编译后程序运行时进行,并且分配内存。
宏替换在编译前进行,不分配内存(5)宏的哑实结合不存在类型,也没有类型转换。
(6)函数只有一个返回值,利用宏则可以设法得到多个值li9_4.c(7)宏展开使源程序变长,函数调用不会(8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)li9_5.c分析该例中的"9.2 “文件包含”处理一个文件包含另一个文件的内容格式:#include "文件名"或#include <文件名>编译时以包含处理以后的文件为编译单位,被包含的文件是源文件的一部分。
li9_6a.c li9_6b.c编译以后只得到一个目标文件.obj被包含的文件又被称为“标题文件”或“头部文件”、“头文件”,并且常用.h 作扩展名。
修改头文件后所有包含该文件的文件都要重新编译头文件的内容除了函数原型和宏定义外,还可以有结构体定义,全局变量定义(1)一个#include命令指定一个头文件(2)文件1包含文件2,文件2用到文件3,则文件3的包含命令#include应放在文件1的头部第一行。