UNDERFLOW关键字与MSYS2上的gcc

9lowa7mx  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(170)

我在编译一个非常简单的代码时遇到了一些非常奇怪的问题

typedef volatile struct _underflow_test
{
    unsigned int    OPERATION_MODE;
    unsigned int    UNDERFLOW;
} underflow_test;

使用gcc12.2无法在MSYS 2中编译此代码。使用-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

有谁知道是什么原因导致了这种现象,以及如何解决这种奇怪的效果吗?也许我漏掉了什么。

3htmauhk

3htmauhk1#

感谢Ian Abbot向正确的方向推进。这是由于公共代码和我的供应商代码之间的#define冲突造成的。供应商的代码要求严格的ANSI代码而没有GNU扩展。
修复方法是使用set(CMAKE_C_EXTENSIONS OFF)设置CMake扩展标志。

相关问题