综合了网上能找到的几个版本,我自己改写了如下的调试宏。
#ifndef MYDEBUG
#define MYDEBUG
#endif
#define MYDEBUG_PREFIX "--Hank Gong--"
//Debug information verbosity: lower values indicate higher urgency
#define MYDEBUG_OFF 0
#define MYDEBUG_ERR 1
#define MYDEBUG_WRN 2
#define MYDEBUG_TRC 3
#define MYDEBUG_INF 4
extern int MYDEBUG_LEVEL;
#define mydebug_off(msg...) \
do{ \
if (MYDEBUG_LEVEL>=MYDEBUG_OFF) { \
printf(MYDEBUG_PREFIX msg); \
} \
}while(0)
#define mydebug_err(msg...) \
do{ \
if (MYDEBUG_LEVEL>=MYDEBUG_ERR) { \
printf(MYDEBUG_PREFIX msg); \
} \
}while(0)
#define mydebug_wrn(msg...) \
do{ \
if (MYDEBUG_LEVEL>=MYDEBUG_WRN) { \
printf(MYDEBUG_PREFIX msg); \
} \
}while(0)
#define mydebug_trc(msg...) \
do{ \
if (MYDEBUG_LEVEL>=MYDEBUG_TRC) { \
printf(MYDEBUG_PREFIX msg); \
} \
}while(0)
#define mydebug_inf(msg...) \
do{ \
if (MYDEBUG_LEVEL>=MYDEBUG_INF) { \
printf(MYDEBUG_PREFIX msg); \
} \
}while(0)
#define mydebug(level, msg...) mydebug_##level(msg)
#undef assert
#define assert(x) { \
if (!(x)) { \
printf(__FILE__ ":%d assert " #x " failed\n", __LINE__); \
}\
}
//Usage:
//just include this file and define MYDEBUG_LEVEL like
//
//int MYDEBUG_LEVEL=MYDEBUG_ERR
//
//in the program use the command by
//mydebug(off|err|wrn|trc|inf, "test %d with %s", 100, "this");
分享到:
相关推荐
"C语言调试宏"通常是指一组预处理器宏,这些宏在编译时或运行时启用,以便在代码中插入调试信息,帮助开发者追踪程序的运行状态。下面将详细介绍C语言中常用的调试宏及其应用。 1. `#define` 宏定义 C语言中的`#...
### C语言中的宏定义知识点详解 #### 一、概述 在C/C++编程语言中,宏定义是一种非常实用的功能,它允许程序员定义一系列文本替换规则,这些规则可以在编译前由预处理器处理。宏定义不仅可以简化代码编写过程,提高...
在编程世界中,C语言是一种基础且强大的编程语言,它提供了丰富的预处理器功能,其中宏定义就是其中之一。...通过阅读"调试宏的用法示例"中的具体代码,你可以更深入地理解这些概念并应用到自己的项目中。
在Linux程序开发中,打印Debug信息是一项重要的调试技巧,它能帮助开发者清晰地了解程序运行状态,快速定位问题所在。本文将介绍C语言中几种常见的输出调试信息的方法。 首先,我们来看一个示例代码片段,这段代码...
在C语言中,宏定义是一种预处理指令,用于在编译阶段进行文本替换。这个"带参宏替换计算给定年份的二月天数"的示例是针对初学者设计的,旨在介绍如何利用宏定义来判断闰年并计算二月份的天数。在编程中,通常我们会...
### C语言中的条件编译宏及其应用 #### 条件编译概述 条件编译是在C语言编程过程中经常使用的一种技术手段,它允许程序员根据不同的条件来决定哪些代码会被编译,哪些不会。这种方式能够极大地增强程序的灵活性和可...
#ifdef 等宏是C语言中的一种条件编译指令,用于控制程序的编译流程。它可以根据不同的条件编译不同的代码段,从而提高程序的通用性和灵活性。 条件编译的基本形式 条件编译的基本形式是: ``` #ifdef 标识符 程序...
在实际应用中,`DebugPrintf.c`可能还会包含一些全局配置,如默认的调试级别,以及是否启用颜色输出等,这些配置可以通过预处理宏或者初始化函数来设定。 总之,调试打印模块在C语言开发中扮演着至关重要的角色。...
本文将深入探讨C语言中的条件编译宏 `#ifdef`、`#ifndef` 和 `#if` 的使用方法,并通过实例展示其应用场景。 #### 条件编译基础 条件编译是指在源代码中加入某些指令来控制是否编译特定代码段的过程。这通常用于...
"C语言_ifedef等宏及妙用" 在C语言中,ifdef等宏是进行条件编译的重要工具。条件编译是指在编译时根据一定...ifdef等宏是C语言中的一种重要技术,可以提高代码的通用性、降低维护成本、提高调试效率和实现条件编译。
### 优化秘籍:C语言预处理器宏的高级应用 #### C语言简介 C语言作为一门通用编程语言,自20世纪70年代初由丹尼斯·里奇(Dennis Ritchie)在贝尔实验室开发以来,一直因其高效性、灵活性和可移植性而受到广泛欢迎...
C语言中的ASSERT(断言)宏是嵌入式软件开发人员可以使用的的调试工具之一。虽然ASSERT功能强大,但我很少看到它被实施,并且在一些使用它的中,它的实施要么是有瑕疵的要么是不正确的。以下一些技巧将不仅能够帮助...
C语言中条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定宏是否被定义来确定编译条件。下面将详细介绍条件编译中使用的预编译指令。 一、预编译指令 1. #define #define...
例如,可以创建一个自定义的调试宏,如: ```c #define DEBUG printf("File: %s, Line: %d, Function: %s\n", __FILE__, __LINE__, __FUNCTION__) int main() { DEBUG; // 输出当前文件、行号和函数名 ... } ```...
嵌入式C语言调试开关详解 在嵌入式系统开发中,调试是一项非常重要的工作。为了方便调试,开发者通常会在代码中添加调试信息,例如assert语句和printf函数。这些调试信息可以帮助开发者快速定位和解决问题。但是,...
在C语言中,`#ifndef`、`#define`、`#endif`等宏是预处理器指令,它们用于实现条件编译,这是一种根据特定条件决定是否编译代码块的机制。预处理器是编译过程的第一步,它在实际编译之前处理源代码,主要任务之一...
例如,如果你在开发过程中需要打印调试信息,可以定义一个DEBUG宏,然后在需要调试的地方使用`#ifdef DEBUG`来包含这些语句。但是,如果你忘记了在条件语句的末尾添加`#endif`,编译器将无法正确识别条件结束,导致...
在编译之前,预处理器会将源代码中的宏定义、include 语句和条件编译指令替换为实际的代码。预处理器还可以处理多文件程序,生成目标代码。 四、实验内容 实验内容包括三部分:函数调用、函数定义和编译预处理。第...