我正在尝试使用
本教程的 UART来编译二进制文件
avr-g++
,但在编译过程中,我收到以下错误:
main.cpp:50:20: error: designator order for field '__file::flags' does not match declaration order in 'FILE'
50 | FILE uart_output = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
我已确定我正在使用
/usr/avr/include/stdio.h
,并尝试根据以下情况使用 C++20:
然而我在编译(甚至理解问题)方面还没有取得任何成功。我还尝试复制 avr
stdio.h
实现源文件(第 152 行) 中的示例,但也没有成功。
非常感谢任何帮助。预先感谢。
看起来,
FDEV_SETUP_STREAM
尚未准备好用于C++,另请参阅示例不支持非平凡的指定初始值设定项以了解错误背后的原因。
对我有用的是重新定义
FDEV_SETUP_STREAM
以按各自的顺序包含 struct __file
的所有组件:
#undef FDEV_SETUP_STREAM
#define FDEV_SETUP_STREAM(p, g, f) \
{ \
.buf = NULL, \
.unget = 0, \
.flags = f, \
.size = 0, \
.len = 0, \
.put = p, \
.get = g, \
.udata = 0 \
}
但是,编译器的行为似乎与引发该错误的时间并不一致。
这是相应的 AVR-LibC 问题 #898。