表格线识别通用库文档
载入中...
搜索中...
未找到
macro.h 文件参考
#include <iostream>
macro.h 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

宏定义

#define Cm_DEBUG_MODE   1
 调试模式宏
 
#define Cm_FUNCTION_NAME   __func__
 函数名宏
 
#define Cm_WEAK_ATTRIBUTE
 弱符号定义宏
 
#define Cm_Assert(expr, message)
 断言宏
 
#define Cm_DebugExpression(expr)
 调试信息打印宏
 
#define Cm_DebugPrint(...)   Cm_DebugExpression(cm::Debug::Print(__VA_ARGS__))
 普通调试打印宏
 
#define Cm_DebugCPrint(...)   Cm_DebugExpression(cm::Debug::CPrint(#__VA_ARGS__, __VA_ARGS__))
 复杂调试打印宏
 
#define Cm_Release_Exception_Start
 程序发布模式下异常捕获宏
 
#define Cm_Release_Exception_Empty_Catch(EXCEPTION_TYPE, expr)
 
#define Cm_Release_Exception_Catch(EXCEPTION_TYPE, expr)
 
#define Cm_Release_Exception_End(expr)
 

宏定义说明

◆ Cm_Assert

#define Cm_Assert ( expr,
message )
值:
do { \
if (!!(expr)) \
; \
else { \
std::cerr << "Assertion failed: " << #expr \
<< " in function " << Cm_FUNCTION_NAME \
<< " at " << __FILE__ \
<< " line " << __LINE__ \
<< " with message: " << (message) << std::endl; \
std::abort(); \
} \
} while (0)
#define Cm_FUNCTION_NAME
函数名宏
Definition macro.h:53

断言宏

用于在函数内部进行条件断言,当条件返回值为 false 时触发断言失败,终止程序运行。

参数
expr条件表达式
message断言失败时触发的消息
注意
仅在宏定义 Cm_DEBUG_MODE 为 1 时有效;断言失败时不会触发异常;消息必须支持 std::cerr 输出,通常为字符串类型。
警告
仅适用于函数内部使用。
示例
// 断言测试
void test_assert() {
int a = 1, b = 3;
// 断言条件表达式,当变量 a 和 b 不相等时,触发断言失败,并打印失败消息
Cm_Assert(a == b, "Variables A and B must be equal!");
}
#define Cm_Assert(expr, message)
断言宏
Definition macro.h:109
作者
dreamy-xay
日期
2023-12-07

在文件 macro.h109 行定义.

◆ Cm_DEBUG_MODE

#define Cm_DEBUG_MODE   1

调试模式宏

当该值为 1 时表示调试模式;为 0 时表示发布模式。

注解
受 DEBUG_VALUE 宏定义影响,若已定义 DEBUG_VALUE 则与 DEBUG_VALUE 等价,若未定义 DEBUG_VALUE 则使用默认值,默认为调试模式(仅用于库内部)。
作者
dreamy-xay
日期
2024-02-29

在文件 macro.h25 行定义.

◆ Cm_DebugCPrint

#define Cm_DebugCPrint ( ...)    Cm_DebugExpression(cm::Debug::CPrint(#__VA_ARGS__, __VA_ARGS__))

复杂调试打印宏

这是一个复杂调试打印宏,会在打印表达式前后输出宏所在的文件和行数信息,具体请参考 Cm_DebugExpression 。与普通调试打印宏不同的是,它会换行打印表达式和表达式的值,提供更丰富和详细的调试信息。

参数
...任意数量的表达式(可变参数)
注意
仅在宏定义 Cm_DEBUG_MODE 为 1 时有效。
示例
int num1 = 1, num2 = 8;
double middle = (num1 + num2) / 2.0;
// 打印一个参数
// 打印多个参数
Cm_DebugCPrint(num1, num2, middle);
// 打印表达式的值
Cm_DebugCPrint(num1 + num2, double(num1) / num2, num1 - num2, num1 * num2);
#define Cm_DebugCPrint(...)
复杂调试打印宏
Definition macro.h:219
作者
dreamy-xay
日期
2023-12-07

在文件 macro.h219 行定义.

◆ Cm_DebugExpression

#define Cm_DebugExpression ( expr)
值:
do { \
std::cout << "\n" \
<< cm::Color::MAGENTA_BG + cm::Color::FONT_BOLD << "[file:" << __FILE__ << "]" << cm::Color::RESET << " "; \
std::cout << cm::Color::YELLOW_BG + cm::Color::FONT_BOLD << "[line:" << __LINE__ << "]" << cm::Color::RESET << " "; \
std::cout << cm::Color::RED_BG + cm::Color::FONT_BOLD << "[START]" << cm::Color::RESET << " \n"; \
(expr); \
std::cout << "\n" \
<< cm::Color::MAGENTA_BG + cm::Color::FONT_BOLD << "[file:" << __FILE__ << "]" << cm::Color::RESET << " "; \
std::cout << cm::Color::YELLOW_BG + cm::Color::FONT_BOLD << "[line:" << __LINE__ << "]" << cm::Color::RESET << " "; \
std::cout << cm::Color::RED_BG + cm::Color::FONT_BOLD << "[END]" << cm::Color::RESET << std::endl; \
} while (0)
static std::string YELLOW_BG
黄色背景
Definition color.hpp:42
static std::string RESET
结束符,重置所有颜色设置
Definition color.hpp:48
static std::string MAGENTA_BG
洋红色背景
Definition color.hpp:44
static std::string FONT_BOLD
加粗
Definition color.hpp:47
static std::string RED_BG
红色背景
Definition color.hpp:40

调试信息打印宏

使用该宏将首先打印调用宏所在的文件和行数信息以及宏开始标识符,然后执行给定的表达式,最后再打印一次调用宏所在的文件和行数信息以及宏结束标识符。

参数
expr需要执行的表达式
注意
仅在宏定义 Cm_DEBUG_MODE 为 1 时有效。
示例
// 打印自定义调试信息
Cm_DebugExpression(std::cout << "debug" << "\n");
#define Cm_DebugExpression(expr)
调试信息打印宏
Definition macro.h:144
作者
dreamy-xay
日期
2023-12-07

在文件 macro.h144 行定义.

◆ Cm_DebugPrint

#define Cm_DebugPrint ( ...)    Cm_DebugExpression(cm::Debug::Print(__VA_ARGS__))

普通调试打印宏

这是一个普通的调试打印宏,会在打印表达式前后输出宏所在的文件和行数信息,具体请参考 Cm_DebugExpression。

参数
...任意数量的表达式(可变参数)
注意
仅在宏定义 Cm_DEBUG_MODE 为 1 时有效。
示例
int num1 = 1, num2 = 8;
double middle = (num1 + num2) / 2.0;
// 打印一个参数
Cm_DebugPrint(middle);
// 打印多个参数
Cm_DebugPrint(num1, num2, middle);
// 打印表达式的值
Cm_DebugPrint(num1 + num2, double(num1) / num2, num1 - num2, num1 * num2);
#define Cm_DebugPrint(...)
普通调试打印宏
Definition macro.h:187
作者
dreamy-xay
日期
2023-12-07

在文件 macro.h187 行定义.

◆ Cm_FUNCTION_NAME

#define Cm_FUNCTION_NAME   __func__

函数名宏

该宏在编译时将被替换为包含宏的代码位置(函数体内)的函数名。

注解
兼容 GNUC、MSVC 等编译器。
警告
仅适用于函数内部使用。
示例
// 测试函数名的打印(不同编译器的输出结果不同)
void test() {
std::cout << Cm_FUNCTION_NAME << "\n";
}
作者
dreamy-xay
日期
2023-12-07

在文件 macro.h53 行定义.

◆ Cm_Release_Exception_Catch

#define Cm_Release_Exception_Catch ( EXCEPTION_TYPE,
expr )

在文件 macro.h273 行定义.

◆ Cm_Release_Exception_Empty_Catch

#define Cm_Release_Exception_Empty_Catch ( EXCEPTION_TYPE,
expr )

在文件 macro.h272 行定义.

◆ Cm_Release_Exception_End

#define Cm_Release_Exception_End ( expr)

在文件 macro.h274 行定义.

◆ Cm_Release_Exception_Start

#define Cm_Release_Exception_Start

程序发布模式下异常捕获宏

这是一个程序发布模式下异常捕获宏,用于捕获程序中的异常,并输出详细异常信息。

注意
仅在宏定义 Cm_DEBUG_MODE 不为 1 时有效。
示例
void Test() {
// *异常处理开始
//* 此处写代码
int *arr = new int[1000];
// ...
//* 针对不同类型异常进行处理
// 自定义数组越界异常报错
Cm_Release_Exception_Empty_Catch(std::out_of_range, {
std::cerr << "out_of_range" << std::endl;
// 释放分配的空间
delete[] arr;
});
// 运行时错误时释放分配的空间
Cm_Release_Exception_Catch(std::runtime_error, {
// 释放分配的空间
delete[] arr;
});
//* 异常处理结束
// 释放分配的空间
delete[] arr;
});
// 释放分配的空间
delete[] arr;
}
#define Cm_Release_Exception_Catch(EXCEPTION_TYPE, expr)
Definition macro.h:273
#define Cm_Release_Exception_End(expr)
Definition macro.h:274
#define Cm_Release_Exception_Empty_Catch(EXCEPTION_TYPE, expr)
Definition macro.h:272
#define Cm_Release_Exception_Start
程序发布模式下异常捕获宏
Definition macro.h:271
作者
dreamy-xay
日期
2023-12-07

在文件 macro.h271 行定义.

◆ Cm_WEAK_ATTRIBUTE

#define Cm_WEAK_ATTRIBUTE

弱符号定义宏

当全局变量或类静态成员变量在头文件中实例化时,编译器会将变量标记为强类型,可能导致重定义错误(即使使用了头文件保护),使用此宏可将变量标记为弱符号以解决此问题。

注意
仅支持 GNUC 和 MSVC 编译器。
示例
// 全局弱类型变量声明
int GLOBAL_VALUE Cm_WEAK_ATTRIBUTE;
// 类静态成员变量声明
class MyClass {
public:
static double VALUE Cm_WEAK_ATTRIBUTE;
};
#define Cm_WEAK_ATTRIBUTE
弱符号定义宏
Definition macro.h:82
作者
dreamy-xay
日期
2023-12-07

在文件 macro.h82 行定义.