static const struct member

时间:2017-04-12 11:38:30

标签: c struct

我正在为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成员静态来节省一些空间,因为它们总是相同的,并且对于任何要发送的消息都不会改变。这在组合中是不可能的,或者我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

不,那是不可能的。

它没有意义,结构的成员需要在内存中,但你不知何故想要"拉出"几个领域,让他们住在其他地方。

你会期待吗。

TModbusFrameRtu frame_a, frame_b; // two instances

&frame_a.Start&frame_b.Start设置相同的值?根本不是这样的事情。

解决方案可能根本不在结构中包含这些,而是​​在实现中使它们成为普通常量。