gpt4 book ai didi

c - sybdb.h 导致 "two or more data types in declaration specifiers"

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:10 24 4
gpt4 key购买 nike

我正在编译一个包含 sybdb.h 的 C 程序,我在下面的 typedef 行收到错误“声明说明符中的两个或多个数据类型”(sybdb.h 是一个标准文件,不是我的文件) .

#if !defined(_WINDEF_) && !defined(_WINDEF_H) && !defined(DOS32X)
typedef int BOOL;
#endif

似乎与我包含的另一个库存在某种冲突,但不知道错误的含义或如何修复它。帮忙?

最佳答案

很可能另一个 header (或您对 C 本身的实现)做了类似的事情:

#define BOOL unsigned char

这样你的编译器就会看到:

typedef int unsigned char;

通过实验,当我编译代码时:

#define XYZZY unsigned char
typedef int BOOL;

int main (void) {
return 0;
}

它工作正常,但是,当我将第一行更改为 #define BOOL unsigned char 时,我得到与您看到的完全相同的消息:

qq.c:2:17: error: two or more data types in declaration specifiers
qq.c:2:5: warning: useless type name in empty declaration

为了证实这一点,您可以只编译预处理器阶段以查看该代码在编译器阶段的真实情况。

这取决于编译器,当然,gcc -E 是您将用于 gcc 的选项。

修复它是另一回事。您可能必须将其中一种别名类型更改为 BOOL1 或类似的极其丑陋的东西。这可能是一个更大的变化,因为我认为它会被大量使用。

可能只需确保两个子系统使用相同的 BOOL 定义就可以逃脱,但仍需要大量分析才能确认这是否成功'有不利的副作用。

要测试(甚至可能实现)此修复,您可以将 #if 语句更改为如下内容:

#ifndef SKIP_BOOL_DEF
#if !defined(_WINDEF_) && !defined(_WINDEF_H) && !defined(DOS32X)
typedef int BOOL;
#endif
#endif

然后使用 gcc -DSKIP_BOOL_DEF(或等效的)编译您的代码以确保 typedef 没有完成。然后它将使用您的(希望兼容的)系统定义。

关于c - sybdb.h 导致 "two or more data types in declaration specifiers",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9041083/

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