C 结构体初始化

2019-07-21 07:14发布

因通信协议不确定,可能更改。现在程序中要取出命令字进行判断,不想在代码中充满USARTx_RX_BUF[5],想要代码便于更改和维护,
所以想到结构体。在com1.h中声明结构体
typedef struct {
        u8 u1c1;
        u8 u2c1;
        u8 u3c1;
        u8 u4c1;
        u8 u1c2;
        u8 u2c2;
        u8 u3c2;
        u8 u4c2;
}recvdef;

在com1.c中定义结构体
recvdef recvC=
{
        USART1_RX_BUF[5], //第一个命令字
        USART2_RX_BUF[5],
        USART3_RX_BUF[5],
        USART4_RX_BUF[5],
        USART1_RX_BUF[6], //第二个命令字
        USART2_RX_BUF[6],
        USART3_RX_BUF[6],
        USART4_RX_BUF[6]
};

USARTx_RX_BUF[5]是串口收到的数据位置,是第一个命令字
USARTx_RX_BUF[6]是串口收到的数据位置,是第二个命令字

USARTx_RX_BUF[5]和USARTx_RX_BUF[6]是在uart.c中定义的变量,在uart.h中声明
com1.c文件已包含uart.h头文件,
因为结构体成员初始化不能是变量;所以报错expression must have a constant value
除了#define,还有什么办法能解决这个问题?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
42条回答
edmund1234
1楼-- · 2019-07-24 03:15
本帖最后由 edmund1234 于 2018-11-29 11:45 编辑
xianshasaman 发表于 2018-11-29 10:43
你自己看看楼主到底问的什么,你又在说什么,你要想分享自己的经验就单独发个帖子,或者你干脆说明白了你 ...
咋了?不说吹牛了吗?我的问题回答不了吗?是吹过头了是吧
我前面就说了, 我可能误解楼主的意思, 但我没理解错你说吹牛的意思, 我就是想看看我到底吹了些啥牛,是我吹大了还是你的天空小的只有井口一般大小?呵呵


edmund1234
2楼-- · 2019-07-24 05:50
程功之道 发表于 2018-11-29 10:44
我还真用过,后面加[]这个就好了

你的方法对比一下#16楼的, 看清楚是否一样
edmund1234
3楼-- · 2019-07-24 11:06
程功之道 发表于 2018-11-29 10:46
都在讨论问题了 消消火   这个没必要后面加(recvdef)

那你说说, #16楼和#21楼, 分别在哪儿, 为啥一个报错一个不报错
xianshasaman
4楼-- · 2019-07-24 15:11
 精彩回答 2  元偷偷看……
edmund1234
5楼-- · 2019-07-24 19:37
xianshasaman 发表于 2018-11-29 11:42
不好意思啊,确实不该在论坛吵架。
其实道理我都懂,结构体的赋值有好几种方法,他那种强制转换是可读性 ...

现在我问你我说的吹在哪里啊? 为什么报错啊? 不懂就说不懂, 别东拉西扯
edmund1234
6楼-- · 2019-07-25 01:05
你可以说我误解楼主的问题, 但说我吹牛就拿证据出来说, 我说的那一点是吹的

一周热门 更多>