Немного фона:ЬурейеГо и #define с таким же именем
Я пытаюсь порта некоторых .ksh файлов, которые я работаю на Solaris для работы на Windows, используя Cygwin. Существует различие между реализацией ksh, выполняемой в окне Solaris, и реализацией pdksh, которая легко устанавливается в Cygwin, которая имеет дело с подоболочками - вы можете проверить this question для получения подробной информации, если хотите.
Из-за этой разницы я пытаюсь создать набор инструментов AST, найденный here, потому что двоичные файлы больше не доступны от AT & T в соответствии с this question.
Мой вопрос:
Когда я пытаюсь построить в соответствии с инструкциями на сайте 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 -82 из файла ast_stdio.h следующим образом:
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 ржавый, как я был Java парень в течение последних 14 лет. Я понимаю, что директива #define оценивается препроцессором, поэтому строка 82 по существу заменяет строку FILE на _sfio_FILE в коде, а строка typedef не будет оцениваться до фактической компиляции.
Очевидно, что я ошибаюсь, или эта ошибка не будет происходить. И, очевидно, этот код компилируется для кого-то, или он не был бы выпущен таким образом. Любое понимание того, что происходит здесь и как я могу скомпилировать этот файл, оценивается. Я нашел this question, который кажется близким к тому, что я прошу, но между моим делом и этим вопросом есть что-то другое, или мой мозг C не может понять, почему этот вопрос должен охватывать мою конкретную ситуацию.
Спасибо за ваше время!
Возможно использование #undef? – koper89
Не могли бы вы предоставить MCVE? http://stackoverflow.com/help/mcve – Yunnosch