gpt4 book ai didi

c - typedef 和 #define 同名

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:48 30 4
gpt4 key购买 nike

一些背景知识:

我正在尝试将我在 Solaris 上运行的一些 .ksh 文件移植到使用 Cygwin 的 Windows 上运行。在 Solaris 机器上运行的 ksh 实现与可在处理子 shell 的 Cygwin 中轻松安装的 pdksh 实现之间存在差异 - 您可以查看 this question如果您愿意,可以了解详细信息。

由于这种差异,我正在尝试构建找到的 AST 工具包 here因为根据 this question AT&T 不再提供二进制文件.

我的问题:

当我尝试根据 GitHub 站点上的说明构建时,我在编译名为 fastfind.c 的文件时遇到错误:

+ cc -D_BLD_STATIC -D_BLD_DLL -D_BLD_ast -I. -I/ast-master/src/lib/libast -Icomp -I/ast-master/src/lib/libast/comp -Imisc -I/ast-master/src/lib/libast/misc -Iinclude -I/ast-master/src/lib/libast/include -Istd -I/ast-master/src/lib/libast/std -D_PACKAGE_ast -c /ast-master/src/lib/libast/misc/fastfind.c,
In file included from /ast-master/src/lib/libast/std/stdio.h:22:0,
from ./ast_wchar.h:87,
from /ast-master/src/lib/libast/include/regex.h:39,
from /ast-master/src/lib/libast/misc/findlib.h:35,
from /ast-master/src/lib/libast/misc/fastfind.c:77:
./ast_stdio.h:82:15: error: conflicting types for '_sfio_FILE'
#define FILE _sfio_FILE
^
./ast_stdio.h:80:24: note: previous declaration of '_sfio_FILE' was here
typedef struct _sfio_s _sfio_FILE;
^
mamake [lib/libast]: *** exit code 1 making fastfind.o

文件ast_stdio.h的第80-82行如下:

80: typedef struct _sfio_s _sfio_FILE;
81:
82: #define FILE _sfio_FILE

另外,ast_stdio.h 文件的顶部有这个:

/* : : generated by proto : : */
/* : : generated from /ast-master/src/lib/libast/features/stdio by iffe version 2012-07-17 : : */

最后,这是我的相关抄送信息:

$ cc --version
cc (GCC) 5.4.0

一点免责声明:我的 C 已经生锈了,因为在过去的 14 年里我一直是 Java 专家。我的理解是 #define 指令由预处理器求值,因此第 82 行实际上会将代码中的字符串 FILE 替换为 _sfio_FILE,并且直到实际编译时才会对 typedef 行求值。

显然我错了,否则这个错误就不会发生。显然这段代码是为某人编译的,否则就不会以这种方式发布。对这里发生的事情以及我如何编译这个文件的任何见解都表示赞赏。我找到了 this question这似乎与我要问的很接近,但是我的情况和那个问题之间存在一些不同,或者我的 C 大脑无法理解为什么那个问题应该涵盖我的特定情况。

感谢您的宝贵时间!

最佳答案

错误是由于 glibc 的更改。有关更多信息以及需要对源文件进行哪些更改,请参阅 Red Hat Bugzilla #1477082。

关于c - typedef 和 #define 同名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41029160/

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