• 初识回显控制


      昨天在群里有朋友提到回显控制,以前从没听说过,所以一时兴起,今天就乘着SVN下载代码期间学习一下,话不多说直接贴代码:

    #include <stdio.h>
    #include <stdarg.h>
    
    //回显类型
    typedef enum
    {
    	NONE_ECHO = 0,
    	ERROR_ECHO = (1 << 0),
    	WARNING_ECHO = (1 << 1),
    	DEBUGGING_ECHO = (1 << 2),
    }echo_type_e;
    
    //回显授权控制
    typedef enum
    {
    	DISABLE_ALL = 0,
    	ENABLE_ERROR = (1 << 0),
    	ENABLE_WARNING = (1 << 1),
    	ENABLE_DEBUGGING = (1 << 2),
    	DISABLE_ERROR = ~(1 << 0),
    	DISABLE_WARNING = ~(1 << 1),
    	DISABLE_DEBUGGING = ~(1 << 2),
    }EnableEcho_e;
    
    typedef struct 
    {
    	int ID;
    	char name[100];
    	EnableEcho_e Debug;
    }MyStruct_t;
    
    //回显打印函数
    void echoCtrl(EnableEcho_e myType, EnableEcho_e type, const char* file, const int line, const char *msg, ...)
    {
    	char temp[1024];
    	va_list args;
    	va_start(args, msg);
    	vsprintf(temp, msg, args);
    	va_end(args);
    	switch (type)
    	{
    		case NONE_ECHO:
    		break;
    		case ERROR_ECHO:
    			if (ERROR_ECHO & myType)
    			{
    				printf("33[0;41m [ERROR] [%s, %d]", file, line);
    				printf(temp, (void *)0);
    				printf("33[0m
    ");
    			}
    		break;
    		case WARNING_ECHO:
    			if (WARNING_ECHO & myType)
    			{
    				printf("33[0;42m [WARNNING] [%s, %d]", file, line);
    				printf(temp, (void *)0);
    				printf("33[0m
    ");
    			}
    		break;
    		case DEBUGGING_ECHO:
    			if (DEBUGGING_ECHO & myType)
    			{
    				printf("33[0;44m [DEBUG] [%s, %d]", file, line);
    				printf(temp, (void *)0);
    				printf("33[0m
    ");
    			}
    		break;
    		default:
    		break;
    	}
    }
    //可变参数函数的两个宏定义写法
    #define OUTPUT_ERROR(type, msg, ...) 		echoCtrl(type, ERROR_ECHO, __FILE__, __LINE__, msg, __VA_ARGS__)	//第一种
    #define OUTPUT_WARNNING(type, msg...) 	echoCtrl(type, WARNING_ECHO, __FILE__, __LINE__, ##msg)					//第二种
    #define OUTPUT_DEBUG(type, msg, ...) 		echoCtrl(type, DEBUGGING_ECHO, __FILE__, __LINE__, msg, __VA_ARGS__)
    
    
    int main()
    {
    	//打开错误和警告回显
    	MyStruct_t my_obj = {10010, "chen", ENABLE_ERROR | ENABLE_WARNING};
    	OUTPUT_ERROR(my_obj.Debug, "my_id:%d, my_name:%s", my_obj.ID, my_obj.name);
    	OUTPUT_WARNNING(my_obj.Debug, "my_id:%d, my_name:%s", my_obj.ID, my_obj.name);
    	OUTPUT_DEBUG(my_obj.Debug, "my_id:%d, my_name:%s", my_obj.ID, my_obj.name);
    	//打开错误和调试回显,关闭警告回显
    	my_obj.Debug &= DISABLE_WARNING;
    	my_obj.Debug |= ENABLE_DEBUGGING;
    	printf("------------------------------------
    ");
    	OUTPUT_ERROR(my_obj.Debug, "my_id:%d, my_name:%s", my_obj.ID, my_obj.name);
    	OUTPUT_WARNNING(my_obj.Debug, "my_id:%d, my_name:%s", my_obj.ID, my_obj.name);
    	OUTPUT_DEBUG(my_obj.Debug, "my_id:%d, my_name:%s", my_obj.ID, my_obj.name);
    	
    	//关闭所有回显
    	my_obj.Debug &= DISABLE_ALL;
    	printf("------------------------------------
    ");
    	OUTPUT_ERROR(my_obj.Debug, "my_id:%d, my_name:%s", my_obj.ID, my_obj.name);
    	OUTPUT_WARNNING(my_obj.Debug, "my_id:%d, my_name:%s", my_obj.ID, my_obj.name);
    	OUTPUT_DEBUG(my_obj.Debug, "my_id:%d, my_name:%s", my_obj.ID, my_obj.name);
    	return 0;
    }
    

      

  • 相关阅读:
    广东省 自考 可在线 转考
    能吃苦这件事的一些思考
    J link 那个版本 最好用 J link RTT 输出日志 卡
    《PyTorch深度学习实践》刘二大人 第九讲
    《PyTorch深度学习实践》刘二大人 第七讲
    《PyTorch深度学习实践》刘二大人 第三讲
    《PyTorch深度学习实践》刘二大人 第八讲
    Seq2Path: Generating Sentiment Tuples as Paths of a Tree
    A Unified Generative Framework for AspectBased Sentiment Analysis
    《PyTorch深度学习实践》刘二大人 第六讲
  • 原文地址:https://www.cnblogs.com/ThatsMyTiger/p/7284002.html
Copyright © 2020-2023  润新知