У меня есть ~ 16k строк кода V старинных C (~ 50 основных прогов), которые были построены безупречно под gcc в то время, но теперь терпят неудачу со многими «lvalue, требуемыми как левый операнд назначения «ошибки в первой процедуре,« stutter.c ». Мне не хватает программиста на C, чтобы найти проблему, и я не могу найти ответ в Интернете, специфичный для моей проблемы (с этим довольно общим сообщением об ошибке).1998 код урожая код теперь не скомпилирован под gcc
Вот специфика:
Вкомпилировать линия от (старинных) Makefile:
GCC -O3 -Wall -D__dest_os = Unix -I/USR/X11/включают -DPLOTX11 -c -o заикание .o ../src/stutter.c
непрохождения примеры заявление:
cell_car(cell) = free_list;
cell_type(cell) = type;
cell_name(atom) = strdup(name);
cell_cdr(list) = binding_list;
cell_cdr(cell_car(current)) = b;
... (и многие подобные)
предшествуют:
typedef enum CELL_ENUM {
CELL_LAMBDA, CELL_SFUNC, CELL_VFUNC, CELL_LIST, CELL_ATOM
} CELL_TYPE;
typedef struct CELL_STRUCT {
void *car, *cdr;
unsigned type : 7;
unsigned mark : 1;
char empty[3];
} CELL;
и:
#define cell_car(c) ((CELL *)(c)->car)
#define cell_cdr(c) ((CELL *)(c)->cdr)
#define cell_name(c) ((char *)(c)->car)
#define cell_func(c) ((CELL *(*)())(c)->car)
#define cell_type(c) ((CELL_TYPE)(c)->type)
#define cell_mark(c) ((c)->mark)
Более подробные сведения код доступны в случае необходимости. Есть ли какая-то очевидная устаревшая функция здесь, которая объясняет эту ошибку?
У меня есть многолетний опыт работы в качестве научного программиста Fortran, но ушел в отставку, прежде чем выучили достаточно C, чтобы полностью сделать переключатель. Не нашли ничего полезного в этом коде на http://gcc.gnu.org/bugs/. Я был бы признателен за любую помощь, которая спасла бы меня от завершения моего обучения C, C++ и gcc, прежде чем я получу эти подпрограммы, работающие под Linux для моего текущего проекта. Большое спасибо!
@ dyp, трудно сказать, не зная тип 'free_list' ... @sambledsoe, можете ли вы попытаться скомпилировать с clang вместо gcc, если вы получите более информативные сообщения об ошибках? –
Было ли это в прошлом законным в C, чтобы сказать '(some_variable) = 123'? Потому что вот что ты здесь делаешь. –
@ EricLippert все еще легально ... –