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

江都建设集团有限公司官方网站星月教你做网站回顾文档

江都建设集团有限公司官方网站,星月教你做网站回顾文档,专业论坛网站有哪些,最新新闻热点事件50字宏定义 首先在谈论正式话题之前,需要先介绍一个基础概念,也是前提,那就是宏定义。 #define demo 1 #define PI 3.14我们都知道这样会将demo 在预处理阶段替换或者说展开为1,Pi 替换为3.14。 #define 宏定义一个标识符来表示一个…

宏定义

首先在谈论正式话题之前,需要先介绍一个基础概念,也是前提,那就是宏定义。

#define demo 1
#define PI 3.14

我们都知道这样会将demo 在预处理阶段替换或者说展开为1,Pi 替换为3.14。
#define 宏定义一个标识符来表示一个常量。预处理所执行的操作就是简单的“文本”替换。

#include <stdio.h>也是这样的,即在预处理的时候先单纯地用头文件stdio.h中所有的“文本”内容替换程序中#include <stdio.h>这一行,然后再进行正式编译。

参考这个链接:

http://c.biancheng.net/view/187.html

条件编译

好了,知道这个概念以后我们就可以引入接下来这个概念,条件编译。

#if defined() || defined() || ...
#ifdef
#ifndef
#else if
#else
#endif

注意,我只是把可能遇见的所有条件编译宏列了一下,并不代表真正写的顺序就是这样。

至于#if defined#ifdef 的区别:
#if defined 就是#if 的一种用法,只不过后面跟了defined
对于#if后面需要是一个表达式,如果表达式为1则调用#if下面的代码。
比如:

#if defined(AA) || defined(BB) //和常规if一样,只是判断当前是否定义了AA,BB,用的是英文的过去时。defined 已经定义了。
#define  WIDE_IN_SENSOR_ZOOM_LUX    390  //你的代码,可以写很多
code...
#endif

对于#ifdef后面需要的只是这个值有没有用#define定义,并不关心define的这个值是0还是1。
比如在上面这里这个例子,就可以接着这样写:

#if defined(AA) || defined(BB) //和常规if一样,只是判断当前是否定义了AA,BB,用的是英文的过去时。defined 已经定义了。
#define  WIDE_IN_SENSOR_ZOOM_LUX    390  //你的代码,可以写很多
code...
#ifdef WIDE_IN_SENSOR_ZOOM_LUX //上面已经定义了WIDE_IN_SENSOR_ZOOM_LUX ,接着执行下面代码
code..
#endif //时刻注意每个条件都应该一个endif
#endif

还有一个区别就是,#ifdef 只能判断一个宏,如果判断多个宏只能用 #if defined() || defined () || defined ()

避免头文件被多次包含(预处理时重复include)

那么最后回到我们的正题,一般我们能在头文件看到最开始这样定义

#ifndef A_H //这个地方不需要和头文件名一样!理解这句话你就明白避免重复包含的真正含义了,而不是单纯记一个八股文知识点。
#defined A_H
code...
#endif

上面是通常的写法,一般重复包含指的是,
我们在a.cpp中

#include "a.h" 
#include "b.h"

但是在a.h中我们又

#include "b.h"

这样在预处理阶段,展开#include "a.h" 时候会递归展开b.h, 然后#include "b.h"又展开一遍,这就是重复包含了。
虽然我们自己在写程序的时候,一般不会编译报错。因为我们写的都是小程序,并不是大型的工程,但是在大型工程中,可能会因为重复包含而编译出错。


回到上面,那么我们在头文件中使用这三行,就相当于一个开关
比如在b.h中写上这三行。那么我们第一次展开a.h时候将b.h展开,然后就会判断是否定义 B_H 这个宏,然后定义,再执行代码。

#ifndef B_H 
#defined B_H
code...
#endif

下一次再展开b.h时候,就会再次判断,但这是我们已经定义过了,就不会再次定义,也不会再次执行我们的代码,也就是不会再次在预处理阶段展开。
也就是不会在#include "b.h" 处再次将这一行替换为头文件中代码。因为#include "b.h" 在预处理阶段会替换为头文件中代码。

总结

所以总结来说就是用条件编译定义一个宏(作为一个开关),去判断是否include当前头文件。以此避免重复定义!

http://www.yayakq.cn/news/337549/

相关文章:

  • 海洋网站建设公司中国沈阳网站在哪里下载
  • 做网站可以卖别的牌子的产品吗小说网站开发猪八戒
  • android 网站模板vue做前台网站
  • 怎么做报名网站如何选择网站模板
  • 货运代理东莞网站建设网站开发创新点
  • 关于政务网站建设昆明网站建设优化图片
  • 上海徐汇区网站建设龙岗网站建设服务
  • 东莞网站建设seo彩票网站开发制作模版
  • 住房新建网站北京专业网站制作流程优势
  • 电子商务网站建设合同标准范文达濠市政建设有限公司网站
  • 手机网站制作方法关于做网站常见的问题
  • 蓬莱做网站那家好查企业联系方式的app软件有哪些
  • 万网有网站建设吗中国销售网
  • 做网站需要学jq吗hao123网址导航官网
  • 静态网站策划书做网站的体会
  • 网站是可以做的吗品牌建设计划书
  • 深圳市住房和建设局网站登录国外优秀创意的个人网页设计欣赏
  • 一个主机一个域名做网站深圳app开发工作室
  • 专门做外包的网站怎么申请公司网站
  • 沭阳网站建设上海市政网网址
  • 电子商务网站建设与管理课件可拖拽编程网站开发
  • 中国建设网官方网站企业登录做网站含营销
  • 大型房产网站模板做新零售这些注册网站和找货源
  • 福州网站制作网站创造网站需要多少钱
  • 企业网站seo 优帮云seo是什么意思电商
  • 深圳网站建设 设计卓越迈网上做试卷的网站
  • 网站推广的方式有怎么提高自己网站的知名度
  • 做一个中英文网站的价格长沙网站推广运营
  • 下载百度官方版国内seo服务商
  • 模板网站建设推广莱芜企业建站公司