少し背景:のtypedefとの#define
私はポートに私はCygwinを使用して、Windows上で実行するには、Solaris上で実行しているいくつかの.kshファイルをしようとしています。 Solarisボックスで実行されているksh実装と、サブシェルを扱うCygwinに簡単にインストール可能なpdksh実装の違いは - あなたが望むなら、this questionをチェックすることができます。
this questionによると、バイナリはAT & Tからもう利用できないため、hereというASTツールキットを作成しようとしています。
私の質問:
私は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
線80をまた
80: typedef struct _sfio_s _sfio_FILE;
81:
82: #define FILE _sfio_FILE
、ast_stdio.hファイルの先頭にこれを持っている:次のようにファイルast_stdio.hの-82である
/* : : generated by proto : : */
/* : : generated from /ast-master/src/lib/libast/features/stdio by iffe version 2012-07-17 : : */
最後には、ここに私の関連ccの情報です:
$ cc --version
cc (GCC) 5.4.0
少し免責事項:私は、過去14年間のためのJavaの男してきたように私はCさびです。 #defineディレクティブはプリプロセッサによって評価されるため、82行目では文字列FILEがコード内の_sfio_FILEに置き換えられ、typedef行は実際のコンパイル時まで評価されません。
明らかに私は間違っている、またはこのエラーは起こっていないでしょう。そして、明らかに、このコードは誰かのためにコンパイルされるか、この方法ではリリースされませんでした。ここで何が起こっているか、どのように私がこのファイルをコンパイルできるかについての洞察は高く評価されます。私はthis questionが私に求めているものに近いと思ったが、私の場合とその質問の間に何か違うものがある、あるいは私の脳が私の特定の状況をカバーすべき理由を理解できない。
ありがとうございました!
おそらく#undefを使用しますか? – koper89
MCVEを提供できますか? http://stackoverflow.com/help/mcve – Yunnosch