neutronlmk 发表于 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字节数组。
其中头文件:
#define GET_NEC_NULL      0
#define GET_NEC_1ST_CODE    1
#define GET_NEC_REP_CODE    2


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


lcw_swust 发表于 2019-4-1 15:38:09

include挺好的呀,难道再写一个config.h

neutronlmk 发表于 2019-4-1 15:47:34

lcw_swust 发表于 2019-4-1 15:38
include挺好的呀,难道再写一个config.h

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

zhugean 发表于 2019-4-1 15:49:54

“.c中include自身这个.h一次”不是普通的做法吗?

neutronlmk 发表于 2019-4-1 16:01:59

zhugean 发表于 2019-4-1 15:49
“.c中include自身这个.h一次”不是普通的做法吗?

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

zhugean 发表于 2019-4-1 16:04:40

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

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

neutronlmk 发表于 2019-4-1 16:09:06

zhugean 发表于 2019-4-1 16:04
我们模块化的规定就是必须包含自己的头文件

收到。
如此就没疑问了。

flamma 发表于 2019-4-1 18:11:37

这种写成enum不是更安全的做法吗?

neutronlmk 发表于 2019-4-1 19:16:44

flamma 发表于 2019-4-1 18:11
这种写成enum不是更安全的做法吗?

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

neutronlmk 发表于 2019-4-3 09:35:32

zhugean 发表于 2019-4-1 16:04
我们模块化的规定就是必须包含自己的头文件

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

albert_w 发表于 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的)

albert_w 发表于 2019-4-3 09:54:06

对于头文件, 一般里面放上一个ifndef define的结构 ,这样包含头文件的时候编译器只会包含一次, 避免里面有宏定义反复包含出错的情况.

zhanan 发表于 2019-4-3 10:41:02

你把这几个宏定义单独放到一个.h文件中,哪里要用到,就用include包含进去。再说你的才这么三个宏定义,怎么搞都行吧。

zhugean 发表于 2019-4-4 08:46:37

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

我个人的话,一般头文件不包含别的头文件,除非头文件中使用到别的头文件中的定义(如结构,枚举啥的)
同时头文件是禁止定义变量和函数的,这个是公认的原则吧
页: [1]
查看完整版本: 模块化编程,三个宏定义既对外公开程序也用,如何规划?