X宏

X宏是汇编语言的一个宏,但很容易转换为C语言宏,工作中小技巧,记录分享大家。

头文件:  XMacro.h

#pragma once
#include <stdio.h>

// 正常使用
// 缺点: 新加入一个颜色,新加入一个颜色,会输出结果错误,或者数组越界
enum COLOR_NOR {
	no_red,
	no_green,
	no_blue
};
static char *ColorStrings[] = { "red", "blue", "green" };


// X 宏	三参数宏(后续再添加一个颜色将变得非常简单, enum和数组都自动得到了更新)
#define COLOR_TABLE \
	X(red, 1, "red", "红色") \
	X(green, 2, "green", "绿色") \
	X(blue, 3, "blue", "蓝色") \
	X(black, 4, "black", "黑色") \

//=10 表示枚举定义从几开始
//#define COLOR_TABLE \
//	X(red, ,"red", "红色") \
//	X(green, = 10, "green", "绿色") \
//	X(blue, , "blue", "蓝色") \

namespace XMacro
{
	// X宏测试
	void Run();
};

cpp文件:

#include "stdafx.h"
#include "XMacro.h"

// X 宏
#define X(a, b, c, d) a,
enum COLOR { COLOR_TABLE };				//枚举值
#undef X

#define X(a, b, c, d) b,
int color_No[] = { COLOR_TABLE };		//编码
#undef X

#define X(a, b, c, d) c,
char *color_name[] = { COLOR_TABLE };	//英文名
#undef X

#define X(a, b, c, d) d,
char *Color_Name[] = { COLOR_TABLE };	//中文名
#undef X

// X宏测试 
void XMacro::Run()
{
	// X 宏	三参数宏
	enum COLOR c = blue;
	printf("========X宏多参测试==========\n");
	printf("枚举值:%d, 编码:%d, 英文:%s, 中文: %s\n", green, color_No[green], color_name[red], Color_Name[red]);
	printf("枚举值:%d, 编码:%d, 英文:%s, 中文: %s\n", c, color_No[c], color_name[c], Color_Name[c]);
	
	// 正常使用
	printf("========X宏正常==========\n");
	enum COLOR_NOR cd = no_red;
	printf("c=%s\n", ColorStrings[cd]);
}

main.cpp

// C++11Demo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "XMacro.h"
#include <time.h>
#include <thread>
#include "Function.h"
#include "Thread.h"
#include <iomanip>
#include "Template.h"
#include <iostream>
#include "Mutex.hpp"

#pragma warning( disable : 4996 )
/*
1. X宏
2. std::function
3. std::bind
4. std::for_each
5. Lambda表达式
6. std::atomic
7. auto
8. std::thread
9. 模板
10. 模板
*/
using namespace XMacro;


int main()
{
	// 测试X宏
	XMacro::Run();
	return 0;
}

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值