c语言 - 在 #define 指令中,如何修复"expected declaration specifiers before"?



我的源代码包含cccp.c文件。195线上有:

#if defined (__STDC__) && defined (HAVE_VPRINTF)
# include <stdarg.h>
# define VA_START(va_list, var) va_start (va_list, var)
# define PRINTF_ALIST(msg) char *msg, ...
# define PRINTF_DCL(msg)
# define PRINTF_PROTO(ARGS, m, n) 
PROTO (ARGS) __attribute__ ((format (__printf__, m, n)))
#else
# include <varargs.h>
# define VA_START(va_list, var) va_start (va_list)
# define PRINTF_ALIST(msg) msg, va_alist
# define PRINTF_DCL(msg) char *msg; va_dcl  ////====here is the error
# define PRINTF_PROTO(ARGS, m, n) () __attribute__ ((format (__printf__, m, n)))
# define vfprintf(file, msg, args) 
{ 
char *a0 = va_arg(args, char *); 
char *a1 = va_arg(args, char *); 
char *a2 = va_arg(args, char *); 
char *a3 = va_arg(args, char *); 
fprintf (file, msg, a0, a1, a2, a3); 
}
#endif
...
void
warning (PRINTF_ALIST (msg))
PRINTF_DCL (msg)   ///the use macro part
{
va_list args;
VA_START (args, msg);
vwarning (msg, args);
va_end (args);
}
static void
fatal (PRINTF_ALIST (msg))
PRINTF_DCL (msg)
{
va_list args;
fprintf (stderr, "%s: ", progname);
VA_START (args, msg);
vfprintf (stderr, msg, args);
va_end (args);
fprintf (stderr, "n");
exit (FATAL_EXIT_CODE);
}

我的编译器显示了以下错误:

error: expected declaration specifiers before ‘va_dcl’
195 | # define PRINTF_DCL(msg) char *msg; va_dcl

当定义宏应用程序时,它就像:

PRINTF_DCL (msg)

源文件类似于:https://cis.temple.edu/~ingargio/cs307/software/mico/cpp/cccp.c但在那个文件中,代码行是199。

我不知道为什么会有";"在va_dcl之前。并且不知道如何修复它。

va_dcl是一个过时的工具,用于在标准化之前很久的语言方言中声明变差函数。(参考文献1,2(

我怀疑编译器在这里走错了路。尝试在命令行上使用-DHAVE_VPRINTF进行编译。

相关内容

最新更新