debug宏起作用应用】的更多相关文章

在linux内核中重新定义了printk,如pr_debug,dev_dbg等.要使用这些宏函数就需要定义DEBUG. 详见:kernel printk信息显示级别 那么DEBUG该定义在什么地方呢? 定义到pr_debug或dev_dbg头文件中,则内核所有的宏都起作用.则打印信息太多,不易调试. 理想的宏定义 应该是想打印信息的模块或文件中,那应放到什么位置呢? 最好放到使用文件的最开头 测试用例: //#define DEBUG static inline int poww(int v)…
iOS中忽略NSLog打印信息 解决办法: 1.新建PrefixHeader_pch文件,在该文件中定义一下宏 //通过DEBUG宏的定义来解决Debug状态下和Release状态下的输出 #ifdef DEBUG #define NSLog(...) NSLog(__VA_ARGS__) #else #define NSLog(...) #endif /* PrefixHeader_pch */ 2.找到程序Build Settings 搜索 Prefix Header,然后在Prefix H…
1. #include <stdio.h> #include <stdarg.h> //仅仅是打印函数名字替换 DEBUG <--> printf #define DEBUG(format, ...) printf(format, ##__VA_ARGS__) //替换打印函数,在打印出来的内容加上前缀 #define XFUNC_PRINT(format, arg...) printf("XFUNC: " format "",…
4.8.6.运算中的临时匿名变量4.8.6.1.C语言和汇编的区别(汇编完全对应机器操作,C对应逻辑操作)(1)C语言叫高级语言,汇编语言叫低级语言.(2)低级语言的意思是汇编语言和机器操作相对应,汇编语言只是CPU的机器码的助记符,用汇编语言写程序必须拥有机器的思维.因为不同的CPU设计时指令集差异很大,因此用汇编编程的差异很大.(3)高级语言(C语言)它对低级语言进行了封装(C语言的编译器来完成),给程序员提供了一个靠近人类思维的一些语法特征,人类不用过于考虑机器原理,而可以按照自己的逻辑原…
原文:Directx11教程(11) 增加一个debug宏       现在我们在common.h中增加一个debug的宏,在每个d3d11函数后调用,如果d3d函数出错,它能够给出程序中错误的代码行数. common.h代码如下: #pragma once #include <d3d11.h> #include <d3dx10math.h> #if defined(DEBUG) || defined(_DEBUG) #ifndef D3D_DEBUG_INFO #define D…
在C语言#define机制中包括了一个规定,与允许把参数替换到文本中,这种实现通常称为宏或宏定义.下面是宏的声明方式: #define      name(parameter-list)          stuff 其中  parameter-list的左括号必须与name紧邻,如果中间有空白,parameter-list就会被解释为stuff的一部分. 宏的作用 1.替换作用:在程序中使用宏可以进行快速的替换. 2.执行简单的计算使用宏在程序的规模和速度方面都更胜一筹. 3.条件编译:可以通…
总结几种log打印printf函数的宏定义 http://blog.chinaunix.net/uid-20564848-id-73402.html #include <stdio.h> #define lU_DEBUG_PREFIX "##########" #define LU_DEBUG_CMD 0x01 #define LU_DEBUG_DATA 0x02 #define LU_DEBUG_ERROR 0x04 #define LU_PRINTF_cmd(msg..…
设置DEBUG, 使用宏定义: #if DEBUG NSLog(@"debug model"); #else //执行release模式的代码 #endif…
#cat log_debug.h #ifdef DEBUG int log_debug(const char *format, ...); #else int log_debug(const char *format, ...); #endif #cat log_debug.cc #include <stdio.h> #include <stdarg.h> #ifdef DEBUG void log_debug(const char *format, ...) { printf(&…
原文地址:http://blog.csdn.net/zhenwenxian/article/details/8564574 内核的部分函数带有__init和__exit宏,负责“初始化”和“清理收尾”该函数.如果该模块被编译进内核,而不是动态加载.宏 __init的使用会在初始化完成后丢弃该函数并收回所占内存, 宏__initdata同__init 类似,只不过对变量有效.简单来说是指示gcc把标记的数据或者函数放到指定sector. linux中把一些启动及初始化时候用的数据用__init标识…
看到开放源代码,宏定义经常这样用 #define some() do { do_somt_thing(); } while (0) 为什么这样用? 能够试一下.假如一个普通宏定义 #define some(x) Fun1(x);Fun2(x) if(condition) some(x); 变为 if(condition) Fun1(x); Fun2(x); 这样直接加个花括号不久行了,为什么还用do......while()?假如加上花括号 #define some(x) {Fun1(x);Fu…
在PHP源码中,我们经常会看到很多函数前面有个PHPAPI,但这是什么呢? 于是我在php源码/main/php.h中找到了它的定义 #ifdef PHP_WIN32 # include "tsrm_win32.h" # include "win95nt.h" # ifdef PHP_EXPORTS # define PHPAPI __declspec(dllexport) # else # define PHPAPI __declspec(dllimport) #…
#ifdef __DEBUG_PRINTF__ /* * * Some Debug printf kit for devlopment * * Date : 2019.03.04 * * Editor : SCHIPS * */ #include <stdio.h> /* Debug with file name and line. */ #define DEBUG(format,...) printf(""format"\n", ##__VA_ARGS…
The Q_OBJECT macro at the beginning of the class definition is necessary for all classes that define signals or slots 只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制. 比如编写事件接口等程序时,有时会出现如下问题: 在PC端成功编译,但在开发板端却显示错误: QObject::connect: No such slot QWidget::*******(…
1. CC_SYNTHESIZE(int, nTest, Test); 相当于: protected: int nTest; public: virtual nTest getTest(void) const { return nTest; } public: virtual void setTest(int var){ nTest = var; } 2. CC_SAFE_DELETE(p);//安全删除 相当于: do { if(p) { delete (p); (p) = 0; } } wh…
涉及文件:kernel/printk.c include/linux/kernel.h用printk内核会根据日志级别把消息打印到当前控制台上.信息正常输出前提是--日志输出级别(msg_log_level)小于控制台级别(console_loglevle),内核中数字越小优先级越高. 没有指定日志级别的printk默认级别是DEFAULT_MESSAGE_LOGLEVEL,默认级别一般为4,与KERN_WARNING一级别.在kernel/printk.c中定义: /* printk's wi…
预处理器的任务 简单来讲,预处理器的任务就是执行源代码中的预处理指令,并对源代码进行相应的处理.因此,从预处理指令的类型来讲,预处理器的任务包括如下的几个部分: 将其他文件包含到当前文件中. 定义宏,用来取代某些复杂文本. 定义类似函数的宏,以更加灵活的方式控制源代码. 实施条件编译,即有选择地编译源代码的某些部分.   头文件中一般是函数.类等的声明,包含到当前文件中后,就可以在当前文件中引用头文件中的函数.类等.   宏的作用 使用预处理指令#define定义的宏主要有三个方面的作用: 替代…
inline函数的优点: C++ 语言的函数内联机制既具备宏代码的效率,又增加了安全性,而且可以自由操作类的数据成员.所以在C++ 程序中,应该用内联函数取代所有宏代码. inline函数与宏定义的区别: 1.宏定义只是简单的文本替换,不做任何安全性的检查也不像函数那样在栈上创建新的变量空间. (1)宏定义可能会造成cxy不希望的变量多次累加;在下面F宏定义中基本上是x出现了几次就会被累加了几次. #define F(x) x+x #define F3(x) x+x+x ; cout<<F(i…
刚接触到MFC编程的人往往会被MFC 向导生成的各种宏定义和预处理指令所吓倒,但是预处理和宏定义又是C语言的一个强大工具.使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能. 一个经典的例子 使用预处理与宏定义最经典的例子莫过于加在一个头文件中以避免头文件被两次编译.试想这种的情况,有一个文件headerfile.h 它被包含在headerfile1.h中,同时在headerfile2.h 中也被包含了,现在有一个CPP文件,implement.cpp 包含了headerfi…
目录(?) C/C++ 预定义宏^ C/C++ 预定义宏用途:诊断与调试输出^ CRT 和 C 标准库中的宏^ NULL 空指针^ limits.h 整数类型常量^ float.h 浮点类型常量^ math.h 数学常量^ EOF 常量^ errno.h 错误代码^ locale 类别^ _MAX_PATH 等文件名与路径长度限制^ RAND_MAX 随机数最大值^ va_arg/va_start/va_end 访问变长函数参数^ 宏实现的 CRT 函数^ Microsoft 预定义宏^ 平台与…
在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用可变参数的宏是一个不错的选择. 在C99中规定宏也可以像函数一样带可变的参数,如: #define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__) 其中,...表示可变参数列表,__VA_ARGS__在预处理中,会被实际的参数集(实参列表)…
程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用.断言assert 是仅在Debug 版本起作用的宏,它用于检查“不应该”发生的情况.在运行过程中,如果assert 的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地方引发了assert). 在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用.如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上asser…
说到宏,恐怕大家都能说出点东西来:一种预处理,没有分号(真的吗?).然后呢?嗯.......茫然中......好吧,我们就从这开始说起.最常见的宏恐怕是#include 了,其次就是#define 还有........还是从宏的用途分类吧:1.#include 主要用于包含引用文件,至今其地位无人能替代:2.注释掉代码.例如: #if 0 ....... #endif; 这种机制是目前注释掉代码的最佳选择,为摩托罗拉公司员工所普遍采用:3.代码版本管理.例如: #ifdef DEBUG file…
用内联取代宏: 1.内联可调试: 2.可进行类型安全检查或自动类型转换: 3.可访问成员变量. 另外,定义在类声明中的成员函数自动转化为内联函数. 文章(一) 内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义.例如: #define MAX(a,b) ((a)>(b)?(a):(b)) 该语句使得程序中每个出现MAX(a,b)函数调用的地方都被宏定义中后面的表达式((a)>(b)?(a):(b))所替换. 宏定义语句的书写格式有过分的讲究, MAX与括号之间不能有空格,…
于C标准库的语言,printf.scanf.sscanf.sprintf.sscanf入输出函数,參数都是可变的.在调试程序时.我们可能希望定义一个參数可变的输出函数来记录日志,那么用可变參数的宏是一个不错的选择. 在C99中规定宏也能够像函数一样带可变的參数,如: #define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__) 当中,...表示可变參数列表,__VA_ARGS__在预处理中,会被实际的參数集(实參列表)所替换. 同一时…
只需要 在ProjectName_Prefix.pch 中追加你对应的宏定义,不用import 就可以直接使用了. #define DEBUG //宏输出函数 #ifdef DEBUG #define SFun_Log(fmt, ...) NSLog((@"%s," "[lineNum:%d]" fmt) , __FUNCTION__, __LINE__, ##__VA_ARGS__); //带函数名和行数 #define SL_Log(fmt, ...) NSLo…
1.宏就是用宏定义指令#define定义一个标识符,用它来表示一个字符串或一段源代码. MFC宏作为MFC类库的一个组成部分在MFC应用程序中经常出现. MFC宏在路径 ".../Microsoft Visual Studio/VC/atlmfc/include" 下的Afxwin.h.Afx.h及Afxmsg_.h等MFC头文件中分别进行了定义. (1)常用的MFC宏 包括消息映射宏.运行时类型识别宏.序列化宏.调试宏和异常宏等. 要想真正了解MFC的内部机制和熟练运用MFC,必须掌…
今天看caffe源码的时候看到了很多宏定义的内容,苦于代码基础薄弱,无法全部理解,故在网上搜得此篇好文,转载一发附原文地址:http://blog.csdn.net/hanchaoman/article/details/8809951/   侵删- 宏替换是C/C++系列语言的技术特色,C/C++语言提供了强大的宏替换功能,源代码在进入编译器之前,要先经过一个称为“预处理器”的模块,这个模块将宏根据编译参数和实际编码进行展开,展开后的代码才正式进入编译器,进行词法分析.语法分析等等. 我们常用的…
多数c语言的初学者对c工程开发过程各个阶段的作用理解不到位,而这方面的的知识又是实际开发过程中经常用到的技能点,所以就成为面试考察中一个重要的考察方面.例如:头文件的作用.头文件的内容:链接的作用和意义:条件编译的作用等等此类问题,接下来将c工程开发过程中的各种问题进行总结使大家能够自如应对这方面的面试题目. c工程开发经过以下几个阶段:           编辑-->预处理-->编译-->汇编-->链接-->运行-->调试 预处理阶段通常要完成三件事情,用头文件内容替…
在写Console程序的时候,能够使用Console.WriteLine()来时时的输出程序的执行状态和各种參数此刻的信息.可是假设是Windows Form程序,我们要怎样实时的观測程序的执行状况呢?能够使用日志文件.可是使用日志文件有一个不足之处,就是日志文件是一个txt文件,不能够向控制台一样能够实时刷新的,这个方案非常不直观.日志文件在部署到server上的时候.由于server上没有VS,所以是调试程序唯一的选择.可是在本机上开发的时候,能够通过VS的Output窗体实时输出程序的执行…