电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

c语言 预处理 命令

4页
  • 卖家[上传人]:小**
  • 文档编号:89124485
  • 上传时间:2019-05-18
  • 文档格式:DOC
  • 文档大小:18KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、C语言预处理命令一、概要介绍指令用途#-空指令,无任何效果#include-包含一个源代码文件#define-定义宏#undef-取消已定义的宏#if-如果给定条件为真,则编译下面代码#ifdef-如果宏已经定义,则编译下面代码#ifndef-如果宏没有定义,则编译下面代码#elif-如果前面的#if给定条件不为真,当前条件为真,则编译下面代码#endif-结束一个#if#else条件编译块#error-停止编译并显示错误信息二、详细分析我们可以在C源程序中插入传给编译程序的各中指令,这些指令被称为预处理器指令,它们扩充了程序设计的环境。现把常用的预处理命令总结如下:1.预处理程序按照ANSI标准的定义,预处理程序应该处理以下指令:#if#ifdef#ifndef#else#elif#endif#define#undef#line#error#pragma#include显然,上述所有的12个预处理指令都以符号#开始,每条预处理指令必须独占一行。2.#define#define指令定义一个标识符和一个串(也就是字符集),在源程序中发现该标识符时,都用该串替换之。这种标识符称为宏名字,相

      2、应的替换称为宏代换。一般形式如下:#definemacro-namechar-sequence这种语句不用分号结尾。宏名字和串之间可以有多个空白符,但串开始后只能以新行终止。例如:我们使用LEFT代表1,用RIGHT代表0,我们使用两个#define指令:#defineLEFT1#defineRIGHT0每当在源程序中遇到LEFT或RIGHT时,编译程序都用1或0替换。定义一个宏名字之后,可以在其他宏定义中使用,例如:#defineONE1#defineTWOONE+ONE#defineTHREEONE+TWO宏代换就是用相关的串替代标识符。因此,如果希望定义一条标准错误信息时,可以如下定义:#defineERROR_MSStandarderroroninputn如果一个串长于一行,可在行尾用反斜线续行,如下:#defineLONG_STRINGThisisaveryverylongStringthatisusedasanexample3.#error#error指令强制编译程序停止编译,它主要用于程序调试。#error指令的一般形式是:#errorerror-message注意,宏串

      3、error-message不用双引号包围。遇到#error指令时,错误信息被显示,可能同时还显示编译程序作者预先定义的其他内容。4.#include程序中的#include指令要求编译程序读入另一个源文件。被读入文件的名字必须用双引号()或一对尖括号()包围,例如:#includestdio.h#includestdio.h都使C编译程序读入并编译头文件以用于I/O系统库函数。包含文件中可以包含其他#include指令,称为嵌套包含。允许的最大嵌套深度随编译器而变。文件名被双括号或尖括号包围决定了对指定文件的搜索方式。文件名被尖括号包围时,搜索按编译程序作者的定义进行,一般用于搜索某些专门放置包含文件的特殊目录。当文件名被双括号包围时,搜索按编译程序实时的规定进行,一般搜索当前目录。如未发现,再按尖括号包围时的办法重新搜索一次。通常,绝大多数程序员使用尖括号包围标准的头文件,双引号用于包围与当前程序相关的文件名。5.条件编译指令若干编译指令允许程序员有选择的编译程序源代码的不同部分,这种过程称为条件编译。5.1#if、#else、#elif#endif条件编译指令中最常用的或许是#if

      4、,#else,#elif和#endif。这些指令允许程序员根据常数表达式的结果有条件的包围部分代码。#if的一般形式是:#ifconstant-expressionStatementsequence#endif如#if后的常数表达式为真,则#if和#endif中间的代码被编译,否则忽略该代码段。#endif标记#if块的结束。#else指令的作用与C语言的else相似,#if指令失败时它可以作为备选指令。例如:#includestdio.h#defineMAX100Intmain(void)#ifMAX99printf(Compiledforarraygreaterthan99.n);#elseprintf(Compliedforsmallarray.n);#endifreturn0;注意,#else既是标记#if块的结束,也标记#else块的开始。因为每个#if只能写一个#endif匹配。#elif指令的意思是否则,如果,为多重编译选择建立一条if-else-if(如果-否则-如果链)。如果#if表达式为真,该代码块被编译,不测试其他#elif表达式。否则,序列中的下一块被测试,如果

      5、成功则编译之。一般形式如下:#ifexpressionStatementsequence#elifexpression1Statementsequence#elifexpression2Statementsequence.#elifexpressionStatementsequence#endif5.2#ifdef和#ifndef条件编译的另一个方法是使用编译指令#ifdef和#ifndef,分别表示如果已定义和如果未定义。#ifdef的一般形式如下:#ifdefmacro-nameStatementsequence#endif如果macro-name原先已经被一个#define语句定义,则编译其中的代码块。#ifndef的一般形式是:#ifndefmacro-nameStatementsequence#endif如果macro-name当前未被#define语句定义,则编译其中的代码块。#ifdef和#ifndef都可以使用#else或#elif语句。#inlucdestdio.h#defineT10Intmain(void)#ifdeftPrintf(HiTn);#elsePrin

      6、tf(Hianyonen);#endif#ifndefMPrintf(MNotDefinedn);#endifReturn0;6.#undef#undef指令删除前面定义的宏名字。也就是说,它不定义宏。一般形式为:#undefmacro-name7.使用defined除#ifdef之外,还有另外一种确定是否定义宏名字的方法,即可以将#if指令与defined编译时操作符一起使用。defined操作符的一般形式如下:definedmacro-name如果macro-name是当前定义的,则表达式为真,否则为假。例如,确定宏MY是否定义,可以使用下列两种预处理命令之一:#ifdefinedMY或#ifdefMY也可以在defined之前加上感叹号!来反转相应的条件。例如,只有在DEBUG未定义的情况下才编译。#if!definedDEBUGPrintf(FinalVersion!n);#endif使用defined的一个原因是,它允许由#elif语句确定的宏名字存在。8.#line#line指令改变_LINE_和_FILE_的内容。_LINE_和_FILE_都是编译程序中预定义的标识符。标

      7、识符_LINE_的内容是当前被编译代码行的行号,_FILE_的内容是当前被编译源文件的文件名。#line的一般形式是:#linenumberfilename其中,number是正整数并变成_LINE_的新值;可选的filename是合法文件标识符并变成_FILE_的新值。#line主要用于调试和特殊应用。9.#pragma#pragma是编译程序实现时定义的指令,它允许由此向编译程序传入各种指令。例如,一个编译程序可能具有支持跟踪程序执行的选项,此时可以用#pragma语句选择该功能。编译程序忽略其不支持的#pragma选项。#pragma提高C源程序对编译程序的可移植性。10.预处理操作符#和#有两个预处理操作符:#和#,它们可以在#define中使用。操作符#通常称为字符串化的操作符,它把其后的串变成用双引号包围的串。例如:#includestdio.h#definemkstr(s)#sintmain(void)Printf(mkstr(IlikeC);Return0;预处理程序把以下的语句:Printf(mkstr(IlikeC);变成Printf(IlikeC);操作符#把两个标记拼在一起,形成一个新标记。例如:#includestdio.h#defineconcat(a,a)a#bintmain(void)Intxy=10;Printf(%d,concat(x,y);Return0;预处理程序把以下语句:Printf(%d,concat(x,y);变成Printf(%d,xy);操作符#和#主要作用是允许预处理程序对付某些特殊情况,多数程序中并不需要。11.预定义宏C规范了5个固有的预定义宏,它们是:_LINE_FILE_DATE_TIME_STDC_LINE_和_FILE_包含正在编译的程序的行号和文件名。_DATE_和内容形如month/day/year(月/日/年)的串,代表源文件翻译成目标码的日期。_TIME_中的串代表源代码编译成目标码的时间,形如hour:minute:second(时:分:秒)如果_STDC_的内容是十进制常数1,则表示编译程序的实现符合标准C。七乐无穷,尽在新浪新版博客,快来体验啊请点击进入

      《c语言 预处理 命令》由会员小**分享,可在线阅读,更多相关《c语言 预处理 命令》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.