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;
}
运行结果: