黑皮男 发表于 2015-6-30 19:03:39

moyanming2013 发表于 2015-6-30 14:06
哦,那能否请lz写一个示例啊?
不用贴源码,只是自己写个示例,这样既能分享这个“巧妙”,又或许能解决L ...

/***keymap.c***/
#define REMOTE_ID   0xAB   //假设红外遥控的地址码为0xAB

unsigned char const keys[]=
{
   key1,
   key2,
   key3,
   key4,
   key5
};
/***********************/
这是暴露出来的演示代码,我们只需要在这个c文件中定义好键值和红外的地址码就可以了,如果是在头文件中同时定义这个数组的话在其他地方多次包含此头文件时会出现重复定义的现象。而且还有一个问题就是我所遇到的关于常量数组的定义都是定义在c文件中,而且在其他文件中引用时是没有声明,不过这都是在STM8用STVD的开发中遇到的现象,参看此贴https://www.stmcu.org.cn/module/forum/thread-602365-1-1.html

黑皮男 发表于 2015-6-30 19:05:40

stary666 发表于 2015-6-28 08:55
发上来看看

/***keymap.c***/
//演示代码
#define REMOTE_ID   0xAB   //假设红外遥控的地址码为0xAB

unsigned char const keys[]=
{
   key1,
   key2,
   key3,
   key4,
   key5
};
/***********************/

黑皮男 发表于 2015-6-30 19:05:58

jinyi7016 发表于 2015-6-27 22:49
可以把文件发上来,看看

/***keymap.c***/
//演示代码
#define REMOTE_ID   0xAB   //假设红外遥控的地址码为0xAB

unsigned char const keys[]=
{
   key1,
   key2,
   key3,
   key4,
   key5
};
/***********************/

759611 发表于 2015-6-30 21:30:05

宏定义……不该放.h文件吗

moyanming2013 发表于 2015-6-30 21:58:28

黑皮男 发表于 2015-6-30 19:03
/***keymap.c***/
#define REMOTE_ID   0xAB   //假设红外遥控的地址码为0xAB


没看出有什么“巧妙”,反而觉得程序结构太混乱了。不利于扩充和维护(现在LZ深受其害)。
别的文件中无法引用这个keys变量,因为没有include。会出现编译错误。
想必可以如下:
/*abc.h*/
typedef enum{
    key1=0x01;
    key2=0x72;
    maxKey=2
};
extern unsinged char const keys;

/*abc.c*/
#include "abc.h"
unsigned char const keys = {key1,key2};

扩充按键时,只需要在enum中添加key并使maxKey增加,并更新keys的定义即可,不用管keys的长度,因为这个长度在编译时已确定:maxKey,keys和maxKey在abc.h引用的任何地方都可以直接使用。sizeof等库函数不太建议经常使用,逼不得已再用,一是sizeof等(由其strlen)开销大(时间和空间都大);二是用了maxKey可以直接知道数组的大小。

Mandelbrot_Set 发表于 2015-7-1 09:40:56

黑皮男 发表于 2015-6-30 19:05
/***keymap.c***/
//演示代码
#define REMOTE_ID   0xAB   //假设红外遥控的地址码为0xAB


REMOTE_ID   在哪被使用了?

Mandelbrot_Set 发表于 2015-7-1 09:41:26

moyanming2013 发表于 2015-6-30 21:58
没看出有什么“巧妙”,反而觉得程序结构太混乱了。不利于扩充和维护(现在LZ深受其害)。
别的文件中无法 ...

sizeof一般没有开销吧...

moyanming2013 发表于 2015-7-1 13:44:50

Mandelbrot_Set 发表于 2015-7-1 09:41
sizeof一般没有开销吧...

嗯,是的,sizeof一般开销甚微,不能与strlen同日而语,我上面说的有些略显浮夸了。

豆豆521 发表于 2015-7-1 15:36:38

宏定义不都在.h文件里嘛

moyanming2013 发表于 2015-7-1 17:15:41

豆豆521 发表于 2015-7-1 15:36
宏定义不都在.h文件里嘛

其实对宏定义到底在哪没有具体的规定,但一般情况下放在头文件中,以方便被引用。
页: 1 [2] 3
查看完整版本: 关于.c文件中的宏定义