搜索
bottom↓
回复: 7

C语言include头文件前定义宏,之后解宏的目的是什么

[复制链接]

出0入0汤圆

发表于 2018-11-7 08:46:55 | 显示全部楼层 |阅读模式
本帖最后由 xf331785508 于 2018-11-7 09:33 编辑

先上一段示例代码,  如下,  在源文件包含头文件时,先定义一段宏,包含完毕后再解宏,这样的写法有什么意义,  另外,在头文件中为什么要把一些宏定义用专用宏开关包起来?? 如Something defined那一段。
  1. /*!< This is head file. For example. File name:  "selfHead.h" */


  2. #ifndef  __SELF_HEAD_H__
  3. #define  __SELF_HEAD_H__

  4. #if defined(__SELF_HEAD)  &&  (__SELF_HEAD == 1)
  5. /*!<   Something defined






  6. */
  7. #endif




  8. #endif        /*!< __SELF_HEAD_H__ */



  9. /*!< This is source file. For example. */

  10. #define                __SELF_HEAD  1
  11. #include "selfHead.h"
  12. #undef                __SELF_HEAD


  13. /*!< 上述用法的意义和妙处是怎样的呢?  */
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入93汤圆

发表于 2018-11-7 08:59:13 | 显示全部楼层
从#ifdefine这个从未见过的宏上来看,大概是为了标新立异吧。另外分成一个头文件不更好么。

出0入8汤圆

发表于 2018-11-7 09:13:26 | 显示全部楼层
奇技淫巧吧。
更直观的做法:拆分另外一个头文件,或者将这部分私有的定义,直接挪到 c 文件里面。

出0入0汤圆

 楼主| 发表于 2018-11-7 09:33:54 | 显示全部楼层
takashiki 发表于 2018-11-7 08:59
从#ifdefine这个从未见过的宏上来看,大概是为了标新立异吧。另外分成一个头文件不更好么。 ...

哦。这个是编辑错误,已经修正。

出0入0汤圆

发表于 2018-11-7 09:58:33 | 显示全部楼层
"selfHead.h" 中专用的定义吧

出0入0汤圆

发表于 2018-11-7 11:05:08 | 显示全部楼层
主要考虑方便管理配置代码吧,

出0入0汤圆

发表于 2018-11-7 11:40:13 | 显示全部楼层
比如你有一个产品,硬件一致,靠软件区分功能,最简单就是软件版本号
.h文件中,根据不同宏来定义不同软件版本号
  1. #ifndef  __SELF_HEAD_H__
  2. #define  __SELF_HEAD_H__

  3. #if defined(__SELF_HEAD ) &&  (__SELF_HEAD == 1)
  4.     #define VERSION 1
  5. #else
  6.     #define VERSION 2
  7. #endif

  8. #endif
复制代码


然后C文件中,include这个文件前,用一个宏,就是可以改软件版本号了。扩展换一下可以完成好多功能,而且可以把乱七八糟的东西都隐藏在.h文件中,C文件保持一致。

  1. #define __SELF_HEAD 1
  2. #indlufe "selfHead.h"
  3. #undef __SELF_HEAD

  4. send_to_pc(VERSION);  //发送软件版本号
复制代码
)  


出0入8汤圆

发表于 2018-11-7 11:55:59 | 显示全部楼层
这样吧,楼主给个较为完整的 demo 吧,看看你手中的代码,用这样的方式,实现了什么功能。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-18 19:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表