宏定义神级用法-调试信息便捷开关

大家编写程序的时候,一般都会有调试信息,这些调试信息一般长期伴随着,后来要发布的时候发那些不需要的调试信息给删除掉,如果是一个有丰富的经验人,是采用一个宏定义的开关来决定是否启动这些打印信息。代码如下:

#include <stdio.h>
/********************************************************************************
DEBUG:
	0     关闭打印信息
	1	  打开打印信息
********************************************************************************/
#define DEBUG	1

int main()
{
	#if DEBUG
	printf("hello\r\n");
	#endif
}

这种模式初看特别好,但是使用的时候似乎仍有些不方便,每一个pirntf前后都需要#if DEBUG #end。能不能其他的模式不需要该宏,方法确实有,下面就贴出代码,在这里感谢电脑圈圈。

#include <stdio.h>
/********************************************************************************
DEBUG:
	0     关闭打印信息
	1	  打开打印信息
********************************************************************************/
#define DEBUG	1
#if DEBUG
	#define hDebug	//
#else
	#define hDebug	printf
#endif

void main()
{
	hDebug("hello\r\n");
}
时间: 2024-11-09 06:01:06

宏定义神级用法-调试信息便捷开关的相关文章

Debug模式应用程序输出Debug调试信息(现成的宏定义,用于格式化打印信息)

[cpp] view plain copy // Debug模式,主要输出一些调试的信息. #ifdef UNICODE #define _FILE_          _STR2WSTR(__FILE__) #define _FUNCTION_          _STR2WSTR(__FUNCTION__) #else #define _FILE_          __FILE__ #define _FUNCTION_          __FUNCTION__ #endif #defin

宏定义#define的用法

预处理#define定义函数 #include <stdio.h> #define Connect(x,y) x##y //"##"表示连接x与y int main(void) { int n = Connect(123,456); printf("n=%d\n",n); return 0; }

宏定义编写技巧__调试技巧【原创】

带颜色打印: printk("\033[1;33;40m misc.c InterIoctl() action=%d\033[0m\r\n", action); 方法一. 1 #ifndef _PMU_DUMMY_ 2 3 #define _PMU_DUMMY_ 4 5 6 7 #define PAX_PMU_DUMMY_DEBUG_ENABLE 8 9 10 11 #ifdef PAX_PMU_DUMMY_DEBUG_ENABLE 12 13 #define PAX_PMU_DUMM

[转]c语言宏定义#define的理解与资料整理

原文地址:http://www.cnblogs.com/haore147/p/3646934.html 1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认识这个宏了:也可以把任何东西定义成宏.因为编译器会在预编译的时候用真身替换替身,而在我们的代码里面却又用常常用替身来帮忙. 看例子: 1 #define PI 3.141592654 在此后的代码

VS2008中编译通过,但调试时出现“未使用调试信息生成二进制文件”的问题

.只要是“建立项目的时候不应建立空项目,而应当建立一个“win32控制台应用程序”.这样确实可以解决问题.只要你选择的是这个"win32控制台应用程序"则在附加选项里面选不选上“空项目”都可以. 其实问题在于,在空项目中不生成调试文件pdb,所以无法调试. 要让项目生成pdb文件,需要更改: 项目属性,configuration properties->linker->Generate Debug Info 从 no 改为 yes 但这样还是不够的,还需要更改: 项目属性,

C/C++中const关键字的用法及其与宏定义的比较

1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 1 const int a = 10; 2 int const b = 20; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了,而且编译器也不允许不赋初值的写法: 在C++中不赋初值的表达一写出来,编译器即报错,且编译不通过. 在C中不赋初值的表达写出来时不报错,编译时只有警告,编译可以

C语言使用宏输出调试信息实战

如何使用宏定义输出信息 C语言提供了#, ##, __VA_ARGS__等符号来帮助我们在宏定义中更好地输出信息.使用方式如下: 输出如下: #的作用是,它会在所引用的宏变量左右两边加一对引号.所以FUN1中的printf函数不会出错,因为FUN1(hello)预编译时被替换成了printf("hello\n") ##的作用是,把两个宏变量连接成一个,FUN2(1, 2)预编译时被替换成了printf("The num is %d\n", 12) 支持c99标准的编

宏定义的用法以及再次解释const和volatile

__I. __O .__IO是什么意思?这是ST库里面的宏定义,定义如下:#define     __I       volatile const        /*!< defines 'read only' permissions      */#define     __O     volatile                  /*!< defines 'write only' permissions     */#define     __IO    volatile      

do...while(0)在宏定义中的巧妙用法

大家都知道,do-while(condition)可以表示循环,但你有没有遇到在一些宏定义中可以不用循环的地方,也用到了 do-while.比如: #define DELETE_POINTER(p) do { if(NULL != p) delete p; p = NULL; }while(0) 这时,do-while(0)的功能就不仅仅是循环了,这是do..while(0)的一种巧妙用法.它有以下几种功能: 1.在后面要加分号,使调用如同函数:调用如下: int* p = new int(5)