c - 在#define 指令中,如何修复“预期的声明说明符之前”?
问题描述
我有源代码包含 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/cis307/software/mico/cpp/cccp.c 但在该文件中,代码行是 199。
我不知道为什么会有';' 在 va_dcl 之前。并且不知道如何解决它。
解决方案
推荐阅读
- reactjs - ChunkLoadError:加载块 # 失败。电子反应样板
- android-studio - 自动保存(SharedPreferences)动态创建的表格行编辑文本值
- python - Matplotlib - 紧凑的布局放置和调整填充
- python - 从列表中删除负数
- ruby - 如何检查我的文件在其他文件之后创建/修改?
- ubuntu - 如何使用同一网络中的不同 PC 创建不同的 Apache Cassandra 节点?
- ruby-on-rails - 传递关联ID数组时Rails不更新记录
- python - ModuleNotFoundError:没有名为“geopy.geocoders”的模块;'geopy' 不是一个包
- dll - 无法访问 DLL 中的 malloc() 内存
- r - 具有因子变量的ggplot密度