字段"__file::flags"的指示符顺序与"FILE"中的声明顺序不匹配



我正试图使用此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:

为什么C++11不支持指定的初始化器列表作为C99?

然而,我在编译(甚至理解这个问题(方面并没有取得任何成功。我还尝试在avrstdio.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                 
}

然而,编译器的行为似乎在何时引发错误方面并不完全一致。

最新更新