你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于.c文件中的宏定义

[复制链接]
黑皮男 提问时间:2015-6-27 09:36 /
阅读主题, 点击返回1楼
收藏 评论21 发布时间:2015-6-27 09:36
21个回答
黑皮男 回答时间: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

/***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[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可以直接知道数组的大小。
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文件里嘛

其实对宏定义到底在哪没有具体的规定,但一般情况下放在头文件中,以方便被引用。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版