我正在为Modbus RTU通信建立一个结构,但是我在编写适当的结构时遇到了问题。这是我现在的结构:
#include "stdint.h"
typedef struct TModbusFrameRtu_tag
{
static const uint32_t Start : 28;
uint8_t Address;
uint8_t Function;
uint8_t Data;
uint16_t Crc16;
static const uint32_t End : 28;
}TModbusFrameRtu;
const uint32_t TModbusFrameRtu_tag::Start = 0x0000;
const uint32_t TModbusFrameRtu_tag::End = 0x0000;
但是编译器不喜欢static const
组合。尝试编译此代码,编译器打印
error: expected specifier-qualifier-list before 'static'|
error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token|
error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token|
error: expected identifier before numeric constant|
error: unknown type name 'TModbusFrameRtu'|
我以为我可以通过声明Start和End成员静态来节省一些空间,因为它们总是相同的,并且对于任何要发送的消息都不会改变。这在组合中是不可能的,或者我该如何解决这个问题呢?
答案 0 :(得分:1)
不,那是不可能的。
它没有意义,结构的成员需要在内存中,但你不知何故想要"拉出"几个领域,让他们住在其他地方。
你会期待吗。
TModbusFrameRtu frame_a, frame_b; // two instances
为&frame_a.Start
和&frame_b.Start
设置相同的值?根本不是这样的事情。
解决方案可能根本不在结构中包含这些,而是在实现中使它们成为普通常量。