Rickey 裘 一无所知

C语言函数变参使用

2016-11-14
佚名

用法示例,一个编译器错误处理函数:

enum e_ErrorLevel
{
	LEVEL_WARNING,
	LEVEL_ERROR,
};

enum e_WorkStage
{
	STAGE_COMPILE,
	STAGE_LINK,
};

void handle_exception(int stage, int level, char *fmt, va_list ap)
{
	char buf[1024];
	vsprintf(buf, fmt, ap);
	if (stage == STAGE_COMPILE)
	{
		if (level == LEVEL_WARNING)
			printf("%s(第%d行): 编译警告: %s!\n", filename, line_num, buf);
		else
		{
			printf("%s(第%d行): 编译错误: %s!\n", filename, line_num, buf);
			exit(-1);
		}
	}
	else
	{
		printf("链接错误: %s!\n", buf);
		exit(-1);
	}
}

void error(char *fmt,...)
{
	va_list va;
	va_start(ap, fmt);
	handle_exception(STAGE_COMPILE, LEVEL_ERROR, fmt, ap);
	va_end(ap);
}

评论