社区
C语言
帖子详情
请教看不懂的宏定义
dsoyy
2012-05-08 10:07:56
#define u8 unsigned char
#define MC_PCC_FILL_STRUCT1 u8:0;u8:8;u8:0;
#define MC_PCC_FILL_STRUCT2 u8:0;u8:8;u8:8;u8:0;
#define MC_PCC_FILL_STRUCT3 u8:0;u8:8;u8:8;u8:8;u8:0;
下面的三条宏,在结果题里面出现过,这样的定义不知道该怎么样去理解。
...全文
190
13
打赏
收藏
请教看不懂的宏定义
#define u8 unsigned char #define MC_PCC_FILL_STRUCT1 u8:0;u8:8;u8:0; #define MC_PCC_FILL_STRUCT2 u8:0;u8:8;u8:8;u8:0; #define MC_PCC_FILL_STRUCT3 u8:0;u8:8;u8:8;u8:8;u8:0; 下面的三条宏,在结果题里面出现过,这样的定义不知道该怎么样去理解。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dsoyy
2012-05-23
打赏
举报
回复
字对齐,结贴。
Fangzhen
2012-05-10
打赏
举报
回复
这个应该是结构体中使用位域的问题
Athenacle_
2012-05-08
打赏
举报
回复
位域,妥妥的。
但0个位的位域编译不过
孤独小剑
2012-05-08
打赏
举报
回复
结构体字节对齐用的,
typedef struct {
struct {
u8 v_ClirSelect;
u8 v_SemicolonFound:1;
MC_PCC_FILL_STRUCT2
} s_Flags;
中MC_PCC_FILL_STRUCT2为#define MC_PCC_FILL_STRUCT2 u8:0;u8:8;u8:8;u8:0;
u8:0是为了上填充上一个字节剩余位,如果没有剩余位则不填充。比如这里MC_PCC_FILL_STRUCT2的第一个u8:0就填充了7位,这样组合起来就是4字节对齐了。
t_aki_ParamList a_ParamList[AKI_PARAM_LENGTH];
ascii a_Command[AKI_CMD_LENGTH];
u16 v_ParserLocalIndex;
u8 v_ExtendedCommand;
u8 v_CommandType;
u8 v_NumberOfParam;
u8 v_IsAbortableCommand;
MC_PCC_FILL_STRUCT2 //?????类似这样的写法出现了,我猜也是位定义,但是起到什么作用了?
}t_aki_DecodedCommand;
这里t_aki_ParamList a_ParamList[AKI_PARAM_LENGTH];
ascii a_Command[AKI_CMD_LENGTH];应该都是4字节对齐了。
接着就是一个u16四个u8,所以还需要填充2个字节来4字节对齐。
所以用MC_PCC_FILL_STRUCT2来填充对齐。
感觉这种对齐的方法风格不好。
nice_cxf
2012-05-08
打赏
举报
回复
大概是为了字节对齐填充没用字节用的,分别填充1-3个字节
proorck6
2012-05-08
打赏
举报
回复
这代码结构性不是很好,别跟它学,小心学坏了。
自信男孩
2012-05-08
打赏
举报
回复
u8 v_SemicolonFound:1这个说明v_SemicolonFound占了一位,该变量取两个值:0或者1;
dsoyy
2012-05-08
打赏
举报
回复
还是举个实际一点的例子来说:
typedef struct {
struct {
u8 v_ClirSelect;
u8 v_SemicolonFound:1;
MC_PCC_FILL_STRUCT2
} s_Flags;
t_aki_ParamList a_ParamList[AKI_PARAM_LENGTH];
ascii a_Command[AKI_CMD_LENGTH];
u16 v_ParserLocalIndex;
u8 v_ExtendedCommand;
u8 v_CommandType;
u8 v_NumberOfParam;
u8 v_IsAbortableCommand;
MC_PCC_FILL_STRUCT2 //?????类似这样的写法出现了,我猜也是位定义,但是起到什么作用了?
}t_aki_DecodedCommand;
dsoyy
2012-05-08
打赏
举报
回复
还是举个实际一点的例子来说:
typedef struct {
struct {
u8 v_ClirSelect;
u8 v_SemicolonFound:1;
MC_PCC_FILL_STRUCT2
} s_Flags;
t_aki_ParamList a_ParamList[AKI_PARAM_LENGTH];
ascii a_Command[AKI_CMD_LENGTH];
u16 v_ParserLocalIndex;
u8 v_ExtendedCommand;
u8 v_CommandType;
u8 v_NumberOfParam;
u8 v_IsAbortableCommand;
MC_PCC_FILL_STRUCT2 //?????类似这样的写法出现了,我猜也是位定义,但是起到什么作用了?
}t_aki_DecodedCommand;
ouyh12345
2012-05-08
打赏
举报
回复
貌似在结构或类里,使用位
W170532934
2012-05-08
打赏
举报
回复
其实宏定义就是在预处理期间进行字符串的替换而已。我觉得这个定义的是一串数据,估计是某些结构体的值而已。
赵4老师
2012-05-08
打赏
举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。
夏天__
2012-05-08
打赏
举报
回复
直接在程序里面的 替换而已。。
相当于起个别名。
使用起来比较方便罢了。
第六章 实验报告 (函数与
宏定义
)
c语言实验报告 实验项目: 1、编写由三角形三边求面积的函数 2、编写求N的阶层 3、求两个整数的最大公约数4、打印输出的指定图形 5、模块化程序设计 姓名:张顺利 实验地点:第一教学楼514教室实验时间:4月30日 一、实验目的与要求 1.编写由三角形三边求面积的函数 调用area()函数求三角形的面积; 在求面积函数中运...
为什么我那么努力,模电还是学不懂?
关注、星标公众号,直达精彩内容整理:电子电路模电想必是近来小伙伴们很头疼的一门课程了。小编结合自己的感受用一句话形容一下:"老师说第一遍不懂,第二遍还是不懂,第三遍还是不懂。...
c语言第七章函数实验总结,第六章 实验报告 (函数与
宏定义
)
c语言实验报告实验项目:1、编写由三角形三边求面积的函数2、编写求N的阶层3、求两个整数的最大公约数4、打印输出的指定图形5、模块化程序设计姓名:张顺利实验地点:第一教学楼514教室实验时间:4月30日一、实验目的与要求1.编写由三角形三边求面积的函数调用area()函数求三角形的面积;在求面积函数中运用海伦公式;2.编写求N的阶层定义符号常量;使用长整型变量存放累乘积;在函数中,使用局部...
gpio_typedef_
请教
高手: 本人刚接触STM32,定义了GPIO_TypeDef* GPIOx,则GPIOx表示一个指针吗?为何不是用*GPIOx == GPIO...
匿名用户1级2012-04-20 回答#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)这是在stm32f10x.h里定义的,看这个定义你就应该明白了,GPIOA本身也是一个指针追问:谢谢你的回答!想再
请教
个几个问题1 因为资料库里面各个外设的函数实在太多,都搞到头脑好混乱的感觉,本人又需要短时间内把它弄懂并会使用它,有什么好的办法吗...
如何快速读懂开源代码?
如何快速读懂开源代码?
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章