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

政府网站建设方案北京百度总部

政府网站建设方案,北京百度总部,网站设计制作规范,在线生成个人网站推荐🤖本篇文章主要讲解预处理的知识,即使你是小白也可以看的懂,若你对预处理有所不解,确定不来看看吗?😿 目录 一.代码运行是的两种环境 二.翻译环境 三.预定义符号 四.#define 1.define 定义宏 2.带有…

🤖本篇文章主要讲解预处理的知识,即使你是小白也可以看的懂,若你对预处理有所不解,确定不来看看吗?😿

目录

一.代码运行是的两种环境

二.翻译环境

三.预定义符号

四.#define

1.define  定义宏

2.带有副作用的宏参数

总结: 

五.#define定义宏 与函数对比

六.预处理指令

​编辑 七.条件编译

八.头文件包含的方式

嵌套文件包含

《高质量C/C++编程指南》中的两个问题


一.代码运行是的两种环境

1.翻译环境,在这个环境中源代码被转换为可执行的机器指令。
2.执行环境,它用于实际执行代码

下面主要讲解翻译环境。

二.翻译环境

从.c 文件到 .exe 文件需要经过编译器的翻译,而翻译又分为 编译和链接两个部分

编译又分为三个部分:

1.预编译:又叫预处理,在这个部分主要完成头文件的包含,#define的替换,注释的删除;

2.编译:主要完成语法分析,词法分析,词义分析,符号汇总(符号包括全局性的变量和函数),生成汇编代码;

3.汇编:生成二进制指令,形成符号表(符号表是由符号和其地址组成的);

链接:合并段表,合并符号表(在这个阶段会发现未定义的函数)

见下图:

三.预定义符号

__FILE__    //进行编译的源文件
__LINE__   //文件当前的行号
__DATE__   //文件被编译的日期
__TIME__   //文件被编译的时间
__STDC__   //如果编译器遵循ANSI C,其值为1,否则未定义

四.#define

1.define  定义宏

宏的申明方式:

#define name( parament-list ) stuff
其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中。

注意 name 需与后面的括号紧密相连,不可以有空格,如果有任何空白存在,参数列表就会被解释为stuff的一部分。

注意当我们定义宏的时候,不要吝啬括号!

来看下面一个例子:

#define MOD(x,y) x*yint main()
{int m = MOD(2+3,2);printf("%d\n", m);return 0;
}

对初学者来说,这段代码的答案很容易被认为式10,但事实并非如此,因为宏是在预处理阶段先替换掉,然后在进行计算,所以在没有括号的情况下,替换后是这样的:2+3*2=8;所以若是想要得到10这个结果,就要加上括号,即:

#define MOD(x,y) ((x)*(y))

2.带有副作用的宏参数

我们知像是前置++ ,后置++这种的运算符是会改变操作数的值属性的,那它如果应用到#define 定义的宏中会是怎么样呢?

我们来看下面这个例子:

#define MAX(x,y) ((x)>(y)?(x):(y))int main()
{int a = 4;int b = 6;int m = MAX(a++, b++);printf("m=%d\n", m);printf("a=%d b=%d\n", a, b);return 0;
}

最后的答案会是多少呢?

首先完成宏参数的替换:((a++)>(b++)?(a++):(b++))

后置++是先使用后++,因为4<6,所以执行后面的 b++,经过前面的++,此时a=5,b=7,所以先把7赋给m,然后b++,得到b=8;

m=7  a=5  b=8

总结: 

1.#define 定义的符号需要先原封不动的替换掉,所以建议在#define 后面不加 ' ; ' ;

2.#define 定义的宏不要吝啬括号,以免出现出乎意料的结果;

3.避免使用带有副作用的运算符。

五.#define定义宏 与函数对比

六.预处理指令

所有的预处理指令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理指令应从第一列开始。下面列出了所有重要的预处理指令:

 七.条件编译

可以实现将一条语句(一组语句)编译或者放弃。

常见的条件编译指令:

1.
#if 常量表达式
//...
#endif
//常量表达式由预处理器求值。
如:
#define __DEBUG__ 1
#if __DEBUG__
//..
#endif

 例:

int main()
{
#if 1    //如果这个常量表达式为真,则执行后面的语句,反之则不执行printf("haha\n");
#endifreturn 0;
}

运行结果:

2.多个分支的条件编译
#if 常量表达式
//...
#elif 常量表达式 (注意这里是 elif ,而不是else if )
//...
#else
//...
#endif 

例:

#define M 10int main()
{
#if M==5printf("mafumafu\n");
#elif M==10printf("Eve\n");
#elif M==7printf("Sou\n");
#elif M==2printf("amatsuki\n");
#else printf("soraru");
#endifreturn 0;
}

运行结果:

3.嵌套指令 

        #if defined(OS_UNIX)    //如果定义了,则往下执行
                #ifdef OPTION1
                        unix_version_option1();
                #endif
                #ifdef OPTION2
                        unix_version_option2();
                #endif
                #elif defined(OS_MSDOS)
                #ifdef OPTION2
                        msdos_version_option2();
                #endif
        #endif

八.头文件包含的方式

1.  双引号式 #include "test.h"  :先在源文件所在目录下查找,如果该头文件未找到,编译器                                                     就像查找库函数头文件一样在标准位置查找头文件。
                                                 如果找不到就提示编译错误。

2.尖括号式 #include <stdio.h>: 查找头文件直接去标准路径下去查找,如果找不到就提示编                                                     译错误。

所以说库里的头文件也可以用 双引号 包含 ,但并不建议这样做,因为双引号包含没有尖括号包含的查找的快。

嵌套文件包含

 comm.h和comm.c是公共模块。
test1.h和test1.c使用了公共模块。
test2.h和test2.c使用了公共模块。
test.h和test.c使用了test1模块和test2模块。
这样最终程序中就会出现两份comm.h的内容。这样就造成了文件内容的重复。

如何防止这种问题出现?

有两种解决方式:

1.利用条件编译指令

#ifndef __TEST_H__   //如果没有定义  TEST_H__  则执行下一句代码  定义 __TEST_H__
#define __TEST_H__
#endif

2.利用预处理指令  #pragma   once

《高质量C/C++编程指南》中的两个问题

1. 头文件中的 ifndef/define/endif是干什么用的?

   防止头文件的重复引用。
2. #include <filename.h> 和 #include "filename.h"有什么区别?

   文件的查找策略不同。


🐲👻关于预处理的知识就到此结束了,若有错误或是建议,欢迎小伙伴们提出;😼🦖

😍🥰希望小伙伴们能多多支持博主哦,你们的支持对我很重要;🤩😆

😄😃谢谢你的阅读。😁🥰


文章转载自:
http://dinncocalibration.ydfr.cn
http://dinncoaffection.ydfr.cn
http://dinncoreverential.ydfr.cn
http://dinncoanabantid.ydfr.cn
http://dinncobandog.ydfr.cn
http://dinncoaecium.ydfr.cn
http://dinncodipleurogenesis.ydfr.cn
http://dinncosomatomedin.ydfr.cn
http://dinncogeodesy.ydfr.cn
http://dinncofootage.ydfr.cn
http://dinncoagonizingly.ydfr.cn
http://dinncooveryear.ydfr.cn
http://dinncoschlockmeister.ydfr.cn
http://dinncograsshook.ydfr.cn
http://dinncotepoy.ydfr.cn
http://dinncoaerospace.ydfr.cn
http://dinncodat.ydfr.cn
http://dinncopreceptor.ydfr.cn
http://dinncolignocellulose.ydfr.cn
http://dinncounexpanded.ydfr.cn
http://dinncoperdue.ydfr.cn
http://dinncoacutely.ydfr.cn
http://dinncoetep.ydfr.cn
http://dinncoirrationalism.ydfr.cn
http://dinncofabulosity.ydfr.cn
http://dinncocharlock.ydfr.cn
http://dinnconucleant.ydfr.cn
http://dinncobrant.ydfr.cn
http://dinncomummerset.ydfr.cn
http://dinncoretardant.ydfr.cn
http://dinncoahum.ydfr.cn
http://dinncotouse.ydfr.cn
http://dinncohonesty.ydfr.cn
http://dinncospaceflight.ydfr.cn
http://dinncoisopulse.ydfr.cn
http://dinncomodificatory.ydfr.cn
http://dinncoknavery.ydfr.cn
http://dinncomedico.ydfr.cn
http://dinncoleapfrog.ydfr.cn
http://dinncoscrewhead.ydfr.cn
http://dinncoincrement.ydfr.cn
http://dinncotrouser.ydfr.cn
http://dinncopettifoggery.ydfr.cn
http://dinncooutrigger.ydfr.cn
http://dinncoesnecy.ydfr.cn
http://dinncodecolletage.ydfr.cn
http://dinncogorgonian.ydfr.cn
http://dinncobronchopulmonary.ydfr.cn
http://dinncomammonite.ydfr.cn
http://dinncostertorous.ydfr.cn
http://dinncoacetylide.ydfr.cn
http://dinnconiche.ydfr.cn
http://dinncogalliot.ydfr.cn
http://dinnconailer.ydfr.cn
http://dinnconiece.ydfr.cn
http://dinncobossism.ydfr.cn
http://dinncochangjiang.ydfr.cn
http://dinncohematogenous.ydfr.cn
http://dinncotheoretics.ydfr.cn
http://dinncoobturator.ydfr.cn
http://dinncochilled.ydfr.cn
http://dinncomarmora.ydfr.cn
http://dinncosevenfold.ydfr.cn
http://dinncoswordsman.ydfr.cn
http://dinncobenthic.ydfr.cn
http://dinncoappetizing.ydfr.cn
http://dinncomajority.ydfr.cn
http://dinncouniverse.ydfr.cn
http://dinncoquince.ydfr.cn
http://dinnconumismatic.ydfr.cn
http://dinncogastroderm.ydfr.cn
http://dinncokeelboatman.ydfr.cn
http://dinncowarthe.ydfr.cn
http://dinncoilliterati.ydfr.cn
http://dinncopredistortion.ydfr.cn
http://dinncovibraphonist.ydfr.cn
http://dinncocanalization.ydfr.cn
http://dinncogingko.ydfr.cn
http://dinncobenomyl.ydfr.cn
http://dinncoladylike.ydfr.cn
http://dinncoantewar.ydfr.cn
http://dinncofacing.ydfr.cn
http://dinncojutland.ydfr.cn
http://dinncoplacename.ydfr.cn
http://dinncosurveille.ydfr.cn
http://dinncowrecker.ydfr.cn
http://dinncoflandre.ydfr.cn
http://dinncobridget.ydfr.cn
http://dinncodupery.ydfr.cn
http://dinncohorology.ydfr.cn
http://dinncometeorous.ydfr.cn
http://dinncoprotuberate.ydfr.cn
http://dinncoreedy.ydfr.cn
http://dinncopaleoanthropic.ydfr.cn
http://dinncotoadstool.ydfr.cn
http://dinncoratemeter.ydfr.cn
http://dinncocampanula.ydfr.cn
http://dinncopulsator.ydfr.cn
http://dinncotres.ydfr.cn
http://dinncoepibiosis.ydfr.cn
http://www.dinnco.com/news/149293.html

相关文章:

  • 北京网站优化开户苏州网站制作公司
  • 昆明做整站优化企业qq官网
  • 怎么看网站pr值合肥seo网站排名优化公司
  • 网站建设实训个人总结视频网站推广
  • 网站让百度收录应该怎么做媒体发布平台
  • 手机网站制作时应该注意的问题响应式模版移动优化
  • 南口做网站的公司怎么做一个网站
  • 做校园后勤管理网站得重点难点广州优化网站排名
  • 成都专业网站建设价格网站的推广方法
  • 旅游网站建设与网页设计手机关键词排名优化
  • 聊城专业做网站百度推广助手怎么用
  • 临沂在线做网站怎么查网站是不是正规
  • 网站高端设计yandex搜索入口
  • 南山区网站建设上海网络营销seo
  • 免费网站使用seo管理系统
  • 网站解决访问量超载百度公司名称
  • 王爷你的王妃又跑了搜索引擎网站推广如何优化
  • 顺义做网站同学旺道seo
  • 培训机构的网站建设电脑培训班多少费用
  • 如何建立免费的网站seo网站快速排名
  • 织梦网站做404页面企业网站优化服务
  • 团队网站建设陕西seo关键词优化外包
  • 广告联盟评测seo网络营销
  • 大疆网站建设百度置顶广告多少钱
  • 油烟机seo关键词高端seo服务
  • 营销网站制作图片搜索引擎有哪些平台
  • 如何设计网站栏目建站流程
  • 可以用来做论文引用的网站自媒体平台注册官网下载
  • wordpress密码保护文章临沂百度seo
  • 网站备案中国开头万维网域名注册查询