使用环境
- 操作系统版本:windows11
- 操作系统平台(x86/x64):x64
- VsCode 版本:1.98.0
- EIDE 插件版本:3.21.1
- C/C++ 插件版本:1.23.6
- 何种编译器(keil_c51/sdcc/armcc5/armgcc/...):gcc_arm
- 编译器版本(非编译问题可忽略):10.2.1
描述问题
写了一个 stm32f103c8t6 的 stdio 初始化库,可以通过预处理宏定义来改变 prinf 重定向的串口
相关代码如下:
#ifndef STDIO_USART_CHANNEL
#error "[Stdio_Init] STDIO_USART_CHANNEL must be defined! Please define it in global configuration."
#elif (STDIO_USART_CHANNEL + 0 == 0)
#error "[Stdio_Init] STDIO_USART_CHANNEL is defined but empty! Please assign a valid value (1/2/3)."
#elif (STDIO_USART_CHANNEL != 1 && \
STDIO_USART_CHANNEL != 2 && \
STDIO_USART_CHANNEL != 3 )
#error "[Stdio_Init] STDIO_USART_CHANNEL must be a valid USART peripheral instance (USART1/USART2/USART3)! Please modify it in global configuration."
#endif
但在预处理宏定义中未赋值 STDIO_USART_CHANNEL
时,编译仍可正常通过。
屏幕截图


期望现象
- 如果没有定义
STDIO_USART_CHANNEL
将会报错
"[Stdio_Init] STDIO_USART_CHANNEL must be defined! Please define it in global configuration."
- 如果定义
STDIO_USART_CHANNEL
但未赋值将会报错
"[Stdio_Init] STDIO_USART_CHANNEL is defined but empty! Please assign a valid value (1/2/3)."
3.如果 STDIO_USART_CHANNEL
未指定可用串口会报错
"[Stdio_Init] STDIO_USART_CHANNEL must be a valid USART peripheral instance (USART1/USART2/USART3)! Please modify it in global configuration."