你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
moyanming2013 发表于 2015-6-30 14:06 哦,那能否请lz写一个示例啊? 不用贴源码,只是自己写个示例,这样既能分享这个“巧妙”,又或许能解决L ...
stary666 发表于 2015-6-28 08:55 发上来看看
jinyi7016 发表于 2015-6-27 22:49 可以把文件发上来,看看
黑皮男 发表于 2015-6-30 19:03 /***keymap.c***/ #define REMOTE_ID 0xAB //假设红外遥控的地址码为0xAB
黑皮男 发表于 2015-6-30 19:05 /***keymap.c***/ //演示代码 #define REMOTE_ID 0xAB //假设红外遥控的地址码为0xAB
moyanming2013 发表于 2015-6-30 21:58 没看出有什么“巧妙”,反而觉得程序结构太混乱了。不利于扩充和维护(现在LZ深受其害)。 别的文件中无法 ...
Mandelbrot_Set 发表于 2015-7-1 09:41 sizeof一般没有开销吧...
豆豆521 发表于 2015-7-1 15:36 宏定义不都在.h文件里嘛
/***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
/***keymap.c***/
//演示代码
#define REMOTE_ID 0xAB //假设红外遥控的地址码为0xAB
unsigned char const keys[]=
{
key1,
key2,
key3,
key4,
key5
};
/***********************/
/***keymap.c***/
//演示代码
#define REMOTE_ID 0xAB //假设红外遥控的地址码为0xAB
unsigned char const keys[]=
{
key1,
key2,
key3,
key4,
key5
};
/***********************/
没看出有什么“巧妙”,反而觉得程序结构太混乱了。不利于扩充和维护(现在LZ深受其害)。
别的文件中无法引用这个keys变量,因为没有include。会出现编译错误。
想必可以如下:
/*abc.h*/
typedef enum{
key1=0x01;
key2=0x72;
maxKey=2
};
extern unsinged char const keys[maxKey];
/*abc.c*/
#include "abc.h"
unsigned char const keys[maxKey] = {key1,key2};
扩充按键时,只需要在enum中添加key并使maxKey增加,并更新keys的定义即可,不用管keys的长度,因为这个长度在编译时已确定:maxKey,keys和maxKey在abc.h引用的任何地方都可以直接使用。sizeof等库函数不太建议经常使用,逼不得已再用,一是sizeof等(由其strlen)开销大(时间和空间都大);二是用了maxKey可以直接知道数组的大小。
REMOTE_ID 在哪被使用了?
sizeof一般没有开销吧...
嗯,是的,sizeof一般开销甚微,不能与strlen同日而语,我上面说的有些略显浮夸了。
其实对宏定义到底在哪没有具体的规定,但一般情况下放在头文件中,以方便被引用。