当前位置: 首页 > news >正文

哪个网站可以搭建网页泉州城乡住房建设厅网站

哪个网站可以搭建网页,泉州城乡住房建设厅网站,怎么让百度快速收录网站,wordpress下载5.11文章目录 前言1. 预定义符号2. #define 定义常量3. #define定义宏4. 带有副作用的宏参数5. 宏替换的规则 前言 在讲解编译和链接的知识点中#xff0c;我提到过翻译环境中主要由编译和链接两大部分所组成。 其中#xff0c;编译又包括了预处理、编译和汇编。当时#xff0c… 文章目录 前言1. 预定义符号2. #define 定义常量3. #define定义宏4. 带有副作用的宏参数5. 宏替换的规则 前言 在讲解编译和链接的知识点中我提到过翻译环境中主要由编译和链接两大部分所组成。 其中编译又包括了预处理、编译和汇编。当时我只是粗略的讲解预处理的过程那么本文将会带着大家去领略预处理的各项操作。还有一些预处理的奇葩操作。 1. 预定义符号 C语言设置了一些预定义符号可以直接使用预定义符号也是在预处理阶段就被直接替换掉了。 预处理符号 __FILE__ //意思进行编译的源文件 __LINE__ //意思显示该代码语句所在的行数 __DATE__ //意思文件被编译的日期 __TIME__ //意思文件被编译的时间 __STDC__ //意思如果该C编译器完全遵顼ANSI C的标准则其值为0。否则就是非定义。演示案例 2. #define 定义常量 基本语法 #define name stuff举个例子 //#define 定义常量 #define MAX 10000 #define reg register //为register关键字创建一个简洁的名字。 #define do_forever for(;;) //用更形象的符号来替换一种实现。 #define CASE break;case //在写case语句的时候自动把break写上。// 如果#define定义的stuff过长可以分成几行来写除了最后一行外 //每行的后面都加上一个反斜杠\续航符 #define DEBUG_PRINT printf(file:%s\tline:%d\t\date:%s\ttime:%s\n, \__FILE__,__LINE__ \__DATE__,__TIME__)思考一个问题#define定义标识符时要不要在最后加上;号 比如 #define MAX 1000; #define MAX 1000我的建议是不要加;号。你别看上面的代码可以正常的运行但是针对某些特定的应用场景可能会引发一些难以察觉的错误。 比如下面的例子 #define MAX 1000; int main() {int max 0;int condition 1;if(condition)max MAX;elsemax 0; }上述代码直接运行会报错而错误的原因是悬空else的问题。因为MAX本身就拥有了一个;号而我们在代码写的分号会被是作为一个空语句也就是说if之后else之前由两条语句。但是如果要在if后里面写多条语句就得有大括号括起来。否则就会报语法错误。 3. #define定义宏 #define 机制包括了一个规定允许把参数替换到文本中这种实现我们通常称为宏或者定义宏。 下面时宏的声明方式 #define name(parament-list) stuff其中parament-list是一个由逗号分隔的符号表它们可能出现在stuff中。 注意参数列表的左括号一定要与name紧邻。如果两者之间有空格的话参数列表就会被编译器解释为stuff中的一部分。 举例 #define SQUARE(x) x*x这个宏接受了一个参数x。如果在上述声明过后把SQUARE(5);置于程序中与编译器就会用5*5这个表达式来替换SQUARE(5)。 但是我们写的这一个宏有潜在的隐患。为什么这么说呢 请看下面的例子 #includestdio.h #define SQUARE(x) x*x int main() {int a 5;printf(%d\n,SQUARE(a 1));return 0; } 哎呦这里的答案不是36吗为什么这里会打印出11 其实这是直接替换文本的弊端它是直接替换的。也就是说先前的printf里的参数变为了 printf(%d,a1*a1); 这样说的话就比较清晰了有替换产生的表达式并没有按照我们的预期顺序进行运算求值。 那我们该怎么修改上述的代码使其能够得到正确的答案呢 方法很简单就是加括号改变运算符的优先级。 #includestdio.h #define SQUARE(x) (x)*(x) int main() {int a 5;printf(%d\n,SQUARE(a 1));return 0; } 这样就达到了预期的效果了。 为了巩固大家加括号的意识我再举一个例子。 这里还有一个宏定义 #define DOUBLE(x) (x) (x)在定义中我们为了避免预算符之间的优先级和结合性我们给其添上了括号但是这个宏仍然会出现问题。 int a 5; printf(%d,10*DOUBLE(a));这个会打印出什么结果呢看上去好像是100但事实上打印的值确是55。 我们发现替换之后 printf(%d,10*(5)(5));乘法运算的优先级高于加法所以就会出现55. 为了解决这个问题我们可以这样写 #define DOUBLE(x) ((x)(x))以上两个例子告诉我们在写宏时一定不要节省你的括号。 4. 带有副作用的宏参数 什么叫带有副作用 请大家看下面几段代码 int a 5; int b 0; b a 1; //方案1 b a; //方案2在方案1中a的值仍然为5 。但在方案2中a的值就变为6了。相信讲到这里你已经有点感觉了。 所谓带有副作用其实就是以修改参与运算变量的值为代价实现我们要到达的效果。 当宏参数在宏的定义中出现超过一次的情况如果参数带有副作用那么你在使用这个宏的时候就有可能出现危险导致不可预测的后果。副作用就是表达式求值的时候出现的永久性的效果。 这里我们设置一段代码来证明带有副作用的宏参数所引发的问题 #define MAX(a,b) ((ab)?(a):(b)) ... x 5; y 8; z MAX(x,y); printf(x%d,y%d,z%d\n,x,y,z);//输出的结果是什么输出的结果为x6,y10,z9 5. 宏替换的规则 在程序中扩展使用#define定义符号和宏需要涉及几个步骤 在调用宏时首先对参数进行检查看看是否包含任何由#define定义的符号。如果有它们首先被替换。替换后的文本会被插入到程序中原来文本的位置。对于宏来说参数名被它们的值所替代。最后再次对结果文件进行扫描看看它是否包含任何由#define定义的符号。如果有则重复上述步骤。 注意 宏参数和#define定义中可以出现其他#define定义的符号。但是对于宏来说不能出现递归。当预处理器搜索#define定义的符号的时候字符串常量的内容不在搜索范围。 限于篇幅的原因本文就像先讲到这里。后续的内容都在预处理详解下中欢迎大家指点一二。
http://www.dnsts.com.cn/news/62321.html

相关文章:

  • 做互联网网站需要什么资质吗哈密网站建设公司哪家专业
  • 做电影网站放抢先版wordpress社交类主题
  • 哪些免费的网站可以做企业宣传南宁网站建设企业网站
  • 免费制作自己的微网站吗网站建设公司何去何从
  • 非物质文化遗产网站怎么做侧边导航条wordpress
  • 西安市高新区建设规划局网站wordpress数据库连接时错误
  • 营销型网站建设的优缺点长沙商城网站建设
  • 网站开发实训意义绍兴网站建设电话
  • 美食网站代做怎么给网站有一字做标记
  • 网站的建设需要多少制作ppt的软件教程
  • 班级网站怎么做网页制作wordpress评论系统
  • angular 做的网站活动策划网站
  • 12380网站建设电子商务网站推广的方式有哪些
  • 购物网站介绍广告投放的理解
  • 吉林省住房与城乡建设厅网站做网站和做app哪个简单
  • 土豆做视频在线观看网站网站设计费 建设费入什么科目
  • 做网站 搞流量 赚广告费怎样进入医院公众号
  • 徐州建设网站价格桂林两江四湖图片
  • wap免费空间成都爱站网seo站长查询工具
  • 在一个城市做相亲网站企业邮箱费用
  • 优惠券网站cms建设公司网站建设需要哪些方面
  • 团购网站开发语言wordpress move导入数据
  • 盛唐网站建设金华网站建设策划
  • 深圳专业网站建设丝芙兰网站做的好差
  • 网站项目需求表大连中山网站建设
  • discuz修改网站标题网络运营商有哪些
  • 留言板网站模板哪家公司做网站便宜
  • 怎么做淘宝网站建网站 必须学html吗
  • 调查问卷在哪个网站做wordpress多站点 seo
  • 公司门户网站模板网站建设中服务器的搭建方式有几种