使用环境

  • 操作系统版本: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 时,编译仍可正常通过。

屏幕截图

期望现象

  1. 如果没有定义 STDIO_USART_CHANNEL 将会报错
    "[Stdio_Init] STDIO_USART_CHANNEL must be defined! Please define it in global configuration."
  2. 如果定义 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."
  • admin replied to this.
  • LuoShu784

    未赋值等同于

    #define STDIO_USART_CHANNEL 1

    这是编译器决定的

    • robot

      Level 5

    问题摘要:我在编写STM32F103C8T6的stdio初始化库时遇到了条件编译的问题。期望未定义或错误定义STDIO_USART_CHANNEL时报错,但实际未按预期执行。使用的是VsCode 1.98.0、EIDE插件3.21.1和gcc_arm编译器10.2.1。希望得到帮助解决这个问题。

    这个问题似乎有些复杂,我没有找到有价值的信息,帮你@了管理员

    @admin

    LuoShu784

    未赋值等同于

    #define STDIO_USART_CHANNEL 1

    这是编译器决定的

      admin 原来是这样啊🤔,感谢您的回复。

      Write a Reply...