gpt4 book ai didi

c++ - 为什么不能 "combine with previous declaration specifier"

转载 作者:行者123 更新时间:2023-11-30 01:10:41 27 4
gpt4 key购买 nike

我有一些正在为嵌入式平台编译的代码。当我尝试针对代码运行基于 Clang 的工具时,我遇到了一些错误。

我已将生成错误的代码缩小为以下内容:

typedef int _GCC_ATTR_ALIGN_8t __attribute__((__mode__(__QI__)));
typedef _GCC_ATTR_ALIGN_8t _Int8t __attribute__((__aligned__(1)));
typedef _Int8t _Intleast8t;
typedef _Int8t _Intfast8t;
typedef _Int8t _int8;
typedef _Int8t int8_t;

针对代码运行 clang 3.8.0 的输出是:

x.cpp:5:16: error: cannot combine with previous 'type-name' declaration
specifier
typedef _Int8t _int8;
^
x.cpp:5:1: warning: typedef requires a name [-Wmissing-declarations]
typedef _Int8t _int8;
^~~~~~~~~~~~~~~~~~~~
1 warning and 1 error generated.

为什么它只在 _int8 typedef 而不是其他 typedef 上有问题?另外,错误是什么意思?

最佳答案

Windows 上的 Clang 默认启用 -fms-extensions,并且在该模式下 _int8 is a keyword equivalent to char ,因为这显然是 MSVC 所做的。

使用 -fno-ms-extensions 禁用它。

关于c++ - 为什么不能 "combine with previous declaration specifier",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37311679/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com