网站大量收购独家精品文档,联系QQ:2885784924

c++预处理过程与语句总结..docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c预处理过程与语句总结.

C/C++预处理过程与语句总结 转载请保留: (CNS电脑与英语学习网) Author: cnscn 1)预处理 根据已放置在文件中的预处理指令来修改源文件的 内容 预处理器会分析\执行所有的预处理器指令,然后删除他们,得到一个仅包含C++语句的转换单元 预处理指令以#号开头 常用的预处理指令: #include?????? 包含头文件 #if?????????????? 条件 #else????????? 否则 #elif??????????? 否则如果 #endif???????? 结束条件 #ifdef 或 #if defined??????? 如果定义了一个符号, 就执行操作 #ifndef 或 #if !defined????? 如果没有定义一个符号, 就指执行操作 #define??????? 定义一个符号 #undef???????? 删除一个符号 #line???????? ?? 重新定义当前行号和文件名 #error??????? 输出编译错误 消息, 停止编译 #pragma??????? 提供 机器专用的特性,同时保证与C++的完全兼容 2)#include  在 程序中包含头文件  头文件通常以.h结尾,其 内容可使用#include预处理器指令包含到 程序中  头文件中一般包含: 函数原型与全局变量 形式常有下面两种 #include iostream #include myheader.h 前者用来引用标准库头文件,后者常用来引用自定义的头文件 前者编译器只搜索包含标准库头文件的默认 目录,后者首先搜索正在编译的源文件所在的 目录,找不到时再搜索包含标准库头文件的默认 目录. 如果把头文件放在其他 目录下,为了查找到它,必须在双引号中指定从源文件到头文件的完整路径 3)#define 定义符号、宏 1符号 #define PI 3.1415925 定义符号PI为3.1415925 #define PI      取消PI的值 这里PI看起来像一个变量,但它与变量没有任何关系,它只是一个符号或标志,在 程序代码编译前,此符号会用一组指定的字符来代替 3不是一个数值,只是一个字符串,不会进行检查 在编译前,预处理器会遍历代码,在它认为置换有意义的地方,用字符串PI的定义值(3来代替  在注释或字符串中的PI不进行替换 在C中常以#define来定义符号常量,但在C++中最好使用const 来定义常量 #define PI 3const long double PI=3 两者比较下,前者没有类型的指定容易引起不必须的麻烦,而后者定义清楚,所以在C++中推荐使用const来定义常量  #define的缺点: ?? 1)不支持类型检查 ?? 2)不考虑作用域 ?? 3)符号名不能限制在一个命名 空间中 2#undef 删除#define定义的符号 #define PI 3... //之间所有的PI都可以被替换为3#undef PI 之后不再有PI这个标识符 3定义宏 #define Print(Var) count(Var)endl 用宏名中的参数带入语句中的参数 宏后面没有;号 Print(Var)中的Print和(之间不能有空格,否则(就会被解释为置换字符串的一部分 #define Print(Var, digits) count setw(digits) (Var) endl 调用 Print(ival, 15) 预处理器就会把它换成 cout setw(15) (ival) endl; 所有的情况下都可以使用内联函数来代替宏,这样可以增强类型的检查 templateclass T inline void Print (const T var, const int digits) { ????? countsetw(digits)varendl; } 调用 Print(ival, 15); 使用宏时应注意的易引起的错误: #define max(x,y) xy?x:y;+ 调用 result = max(myval, 99); 则换成 result = myval99?myval:99; 这个没有问题是正确的 调用 result = max(myval++, 99); 则换成 result = myval++99?myval++:99; 这样如果myval99那么myval就会递增两次,这种情况下()是没什么用的如result=max((x),y)则 result = (myval++)99?(myval++):99; 再如 #define product(m,n) m*

文档评论(0)

jcc001 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档