假设我们使用avr-gcc编译具有以下结构的代码:
typedef struct {
uint8_t bLength;
uint8_t bDescriptorType;
int16_t wString[];
} S_string_descriptor;我们像这样全局初始化它:
const S_string_descriptor sn_desc PROGMEM = {
1 + 1 + sizeof L"1234" - 2, 0x03, L"1234"
};让我们来看看它生成了什么:
000000ac <__trampolines_end>:
ac: 0a 03 fmul r16, r18
ae: 31 00 .word 0x0031 ; ????
b0: 32 00 .word 0x0032 ; ????
b2: 33 00 .word 0x0033 ; ????
b4: 34 00 .word 0x0034 ; ????
...因此,根据需要,字符串内容确实跟随在结构的前两个元素之后。
但是如果我们尝试检查sizeof sn_desc,结果是2。变量的定义是在编译时完成的,sizeof也是一个编译时操作符。那么,为什么sizeof var没有显示var的真实大小呢?编译器的这种行为(例如,将任意数据添加到结构中)记录在哪里?
发布于 2018-07-23 10:38:24
sn_desc是一个指向闪存的2字节指针。它旨在与LPM等人一起使用,以便检索实际数据。无法获得此数据的实际大小;请单独存储它。
https://stackoverflow.com/questions/51470592
复制相似问题