子嘉的博客 子嘉的博客
首页
bic-bic
技术
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

高子嘉

没有比脚更长的路,没有比人更高的山
首页
bic-bic
技术
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • new
  • vector_init
  • vector_traverse
  • macro_magic
  • io
  • gdb
  • cplusplus
子嘉
2022-06-05

macro_magic

先补充点小知识,在 C++的宏定义中#和##的作用 这里表示一个宏处理

#define xxx 123
1

一个#表示,取字符串本身,这里 NAME(youdao),经过宏处理就表示字符串 "youdao"

#define NAME(val) #val

NAME(youdao)//"youdao"
1
2
3

这里两个#,表示字符的连接

#define CONNECT(a,b) (#a)##(#b)

CONNECT(you, dao);//"youdao"
1
2
3

logdef.h 文件

#ifndef _LOG_DEF_H_
#define _LOG_DEF_H_

#if !defined(LOG_DEF)
#define LOG_DEF(val, log) val,
#define LOG_DEF_ENUM

enum {
#endif
LOG_DEF(LT_LogIn, LogIn)
LOG_DEF(LT_LogOut, LogOut)

#if defined(LOG_DEF_ENUM)
#undef LOG_DEF_ENUM
#undef LOG_DEF
LOG_DEF_MAX
};

#endif

#endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

头文件中通过宏定义 #define LOG*DEF(val, log) val, 得到了一个日志 id 定义枚举,文件经过预处理,等于得到了一下文件

#ifndef \_LOG_DEF_H*
#define _LOG_DEF_H_

enum {
LT_LogIn,
LT_LogOut,
LOG_DEF_MAX
};
#endif
1
2
3
4
5
6
7
8
9

logdef.cpp 文件

#include "LogDef.h"

struct SLogDef
{
const char* str;
const char* strlog;
};

static const SLogDef logdef*list[] = {
#undef \_LOG_DEF_H*
#define LOG_DEF(val, strlog){#val, #strlog},
#include "LogDef.h"
#undef LOG_DEF
};

const char\* log_string(int log_type)
{
if (log_type < 0 || log_type >= LOG_DEF_MAX)
{
return "WrongType";
}
return logdef_list[log_type].strlog;
}

bool log_sampling(int log_type)
{
if(log_type < 0 || log_type >= LOG_DEF_MAX)
{
return true;
}
return logdef_list[log_type].sampling;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

文件通过使用#undef 和 #include 重新加载了 logdef.h 文件,并且通过 #define LOG_DEF 生成了一个日期字符串数组,文件经过预编译得到文件如下

#include "LogDef.h"

struct SLogDef
{
const char* str;
const char* strlog;
};

static const SLogDef logdef_list[] = {
{"LT_LogIn", "LogIn"},
{"LT_LogOut", "LogOut"},
};

const char\* log_string(int log_type)
{
if (log_type < 0 || log_type >= LOG_DEF_MAX)
{
return "WrongType";
}
return logdef_list[log_type].strlog;
}

bool log_sampling(int log_type)
{
if(log_type < 0 || log_type >= LOG_DEF_MAX)
{
return true;
}
return logdef_list[log_type].sampling;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
编辑 (opens new window)
上次更新: 2023/02/24, 10:34:03
vector_traverse
io

← vector_traverse io→

最近更新
01
mongodb restore
03-06
02
pytesseract
02-28
03
consul
02-24
更多文章>
Theme by Vdoing | Copyright © 2022-2025 子嘉 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式