Ошибка C / C ++: ожидаемый инициализатор перед определенной функцией - PullRequest
0 голосов
/ 31 марта 2020

Я портирую Einstein@Home (Radio Pulsar Edition) на Solaris и застрял на erp_execinfo_plus.c, который сообщает об ошибке ниже.

builder@bertha:~/brp/src$ g++ -g -I/export/home/builder/brp/install/include/libxml2 -I/export/home/builder/brp/install/include/boinc -I/usr/gnu/include -I/export/home/builder/brp/install/include -DHAVE_INLINE -DBOINCIFIED -DUSE_CPU_RESAMP -DUSE_FFTW_FFT -DNDEBUG -DLOGLEVEL=info -ggdb3 -rdynamic -O3 -Wall -fprofile-use -c /export/home/builder/brp/src/erp_extract.c 
/export/home/builder/brp/src/erp_extract.c:8:12: error: expected initializer before 'VPARAMS'
 void fatal VPARAMS ((const char *format, ...)) {
            ^~~~~~~
/export/home/builder/brp/src/erp_extract.c:16:16: error: expected initializer before 'VPARAMS'
 void non_fatal VPARAMS ((const char *format, ...)) {
                ^~~~~~~

Я пробовал множество итераций, чтобы исправить проблему, перемещая блоки кода, переопределяя их как структуру и перегружая. Я даже использовал выходы препроцессора g cc и gcc / g ++, чтобы найти ошибку безрезультатно.

g cc:

/export/home/builder/brp/src/erp_extract.c:16:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'VPARAMS'

ПРИМЕЧАНИЯ:

  1. Файл erp_extract.c является минимальным исходным кодом для воспроизведения ошибки.

  2. По умолчанию #include binutils sysdef.h

erp_extract. c

#include "sysdep.h"

static FILE *ostream; /* output stream */

void fatal(const char *, ...) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
void non_fatal(const char *, ...) ATTRIBUTE_PRINTF_1;
void report(const char *, va_list) ATTRIBUTE_PRINTF(1,0);

void fatal VPARAMS ((const char *format, ...)) {
    VA_OPEN (args, format);
    VA_FIXEDARG (args, const char *, format);

    report(format, args);
    VA_CLOSE (args);
}

void non_fatal VPARAMS ((const char *format, ...)) {
    VA_OPEN (args, format);
    VA_FIXEDARG (args, const char *, format);

    report(format, args);
    VA_CLOSE (args);
}

void report(const char * format, va_list args)
{
    vfprintf(ostream, format, args);
    putc ('\n', ostream);
}
...