搜索
bottom↓
回复: 13

模块化编程,三个宏定义既对外公开程序也用,如何规划?

[复制链接]

出0入27汤圆

发表于 2019-4-1 15:28:40 | 显示全部楼层 |阅读模式
我想把红外解码程序模块化,程序void ir_nec_decode(int8_t *decode_status,int8_t *nec_code)包括两个指针,*decode_status输出解码结果GET_NEC_NULL /GET_NEC_1ST_CO/DE GET_NEC_REP_CODE ;nec_code输出解码结果的4字节数组。
其中头文件:
  1. #define GET_NEC_NULL        0
  2. #define GET_NEC_1ST_CODE    1
  3. #define GET_NEC_REP_CODE    2


  4. extern void ir_nec_decode(int8_t *decode_status,int8_t *nec_code);
复制代码
当中几个宏定义:
  1. #define GET_NEC_NULL        0
  2. #define GET_NEC_1ST_CODE    1
  3. #define GET_NEC_REP_CODE    2
复制代码
我既要对外开放,程序ir_nec_decode中也需要用到。
如果在.h和.c中都写一遍
或者.c中include自身这个.h一次
都感觉不符合模块化的原则。
这种情况应该如何处理?


出0入0汤圆

发表于 2019-4-1 15:38:09 | 显示全部楼层
include挺好的呀,难道再写一个config.h

出0入27汤圆

 楼主| 发表于 2019-4-1 15:47:34 | 显示全部楼层
lcw_swust 发表于 2019-4-1 15:38
include挺好的呀,难道再写一个config.h

我现在就是这个纠结,难道要建第二个头文件?

出0入0汤圆

发表于 2019-4-1 15:49:54 | 显示全部楼层
“.c中include自身这个.h一次”不是普通的做法吗?

出0入27汤圆

 楼主| 发表于 2019-4-1 16:01:59 | 显示全部楼层
zhugean 发表于 2019-4-1 15:49
“.c中include自身这个.h一次”不是普通的做法吗?

引用自身.h不知道符不符合模块化原则
如果大家都这样我就做了

出0入0汤圆

发表于 2019-4-1 16:04:40 | 显示全部楼层
neutronlmk 发表于 2019-4-1 16:01
引用自身.h不知道符不符合模块化原则
如果大家都这样我就做了

我们模块化的规定就是必须包含自己的头文件

出0入27汤圆

 楼主| 发表于 2019-4-1 16:09:06 | 显示全部楼层
zhugean 发表于 2019-4-1 16:04
我们模块化的规定就是必须包含自己的头文件

收到。
如此就没疑问了。

出0入0汤圆

发表于 2019-4-1 18:11:37 | 显示全部楼层
这种写成enum不是更安全的做法吗?

出0入27汤圆

 楼主| 发表于 2019-4-1 19:16:44 | 显示全部楼层
flamma 发表于 2019-4-1 18:11
这种写成enum不是更安全的做法吗?

我用开部分台系OTP,他们C编译器不支持enum。

出0入27汤圆

 楼主| 发表于 2019-4-3 09:35:32 来自手机 | 显示全部楼层
zhugean 发表于 2019-4-1 16:04
我们模块化的规定就是必须包含自己的头文件

昨天晚上查了,包含自身头文件是为了让编译器检查声明的函数原型,谢谢。
继续请教:
.h适宜include硬件部分头文件吗?还是建议在.c里面做?
全局变量允许其它.c调用,这些变量建议.h中还是在.c中定义?

出0入42汤圆

发表于 2019-4-3 09:52:48 | 显示全部楼层
本帖最后由 albert_w 于 2019-4-3 09:54 编辑
neutronlmk 发表于 2019-4-3 09:35
昨天晚上查了,包含自身头文件是为了让编译器检查声明的函数原型,谢谢。
继续请教:
.h适宜include硬件 ...


变量定义需要做到c里面, 不然多次include(被不同的C文件)就报错了, 因为这导致每个C文件里面都定义一次这个变量. h里面只能够extern int xxx(变量, 不是说函数, 所有函数声明默认都是extern的)

出0入42汤圆

发表于 2019-4-3 09:54:06 | 显示全部楼层
对于头文件, 一般里面放上一个ifndef define的结构 ,这样包含头文件的时候编译器只会包含一次, 避免里面有宏定义反复包含出错的情况.

出0入0汤圆

发表于 2019-4-3 10:41:02 | 显示全部楼层
你把这几个宏定义单独放到一个.h文件中,哪里要用到,就用include包含进去。再说你的才这么三个宏定义,怎么搞都行吧。

出0入0汤圆

发表于 2019-4-4 08:46:37 | 显示全部楼层
neutronlmk 发表于 2019-4-3 09:35
昨天晚上查了,包含自身头文件是为了让编译器检查声明的函数原型,谢谢。
继续请教:
.h适宜include硬件 ...

我个人的话,一般头文件不包含别的头文件,除非头文件中使用到别的头文件中的定义(如结构,枚举啥的)
同时头文件是禁止定义变量和函数的,这个是公认的原则吧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 15:58

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

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