我在编译一个非常简单的代码时遇到了一些非常奇怪的问题
typedef volatile struct _underflow_test
{
unsigned int OPERATION_MODE;
unsigned int UNDERFLOW;
} underflow_test;
此代码无法使用
gcc12.2
在 MSYS2 中编译。使用 -E
选项,我检查了有关的代码是否已转换为:
typedef volatile struct _underflow_test
{
unsigned int OPERATION_MODE;
unsigned int
# 4137 "C:/Users/work/eec_control/TC367_project/Libraries/Infra/Sfr/TC36A/_Reg/IfxGeth_regdef.h" 3
4
# 4137 "C:/Users/work/eec_control/TC367_project/Libraries/Infra/Sfr/TC36A/_Reg/IfxGeth_regdef.h"
;
} underflow_test;
因此预处理器将
UNDERFLOW
转换为 4。然后此转换无法编译。
使用 gcc11
不会这样做 - 它不会将 UNDERFLOW
字段转换为 4.
两种情况下的命令行是一样的:
cd C:/Users/work/build-eec-gnu/core_files/bsp && C:/msys64/mingw64/bin/gcc.exe
-DROOT_INSTALL_DIR="\"C:/Program Files (x86)/eec-control\""
@CMakeFiles/bsp-core-tc367-a1.dir/includes_C.rsp
-Wall -Wextra -Wno-unknown-pragmas -Wfloat-equal -Wconversion -Wparentheses -Wunused-parameter -Wunused-variable -Wstrict-prototypes
-DMAJOR_RELEASE_NUMBER=1 -DMINOR_RELEASE_NUMBER=0 -DPATCH_RELEASE_NUMBER=42 -E -O0 -DNDEBUG -g
-fdiagnostics-color=always -std=gnu99 -MD -MT core_files/bsp/CMakeFiles/bsp-core-tc367-a1.dir/hal.c.obj
-MF CMakeFiles/bsp-core-tc367-a1.dir/hal.c.obj.d -o CMakeFiles/bsp-core-tc367-a1.dir/hal.c.obj
-c C:/Users/work/eec_control/core_files/bsp/hal.c
任何人都知道是什么原因造成的,以及如何解决这种奇怪的效果?也许我错过了什么。