__FUNCTION__, __LINE__ 有助于debug的宏定义

__FUNCTION__, __LINE__

今天无意之间看到一段代码,里面有这样一个片段:

	if (!interface) {
		err ("%s - error, can't find device for minor %d",
		     __FUNCTION__, subminor);
		retval = -ENODEV;
		goto exit;
	}

这个__FUNCTION__干嘛的?少见(本人水平不够~),有意思~

后面找了一下,这个是和编译器GCC相关连的宏定义,而这些宏定义的时候有助于快速定位程序报错或警告的位置,在文件中的行数(__LINE__)

给出demo

/*************************************************
code writer	: EOF
code date	: 2014.08.17
code file	: macro_demo.c
e-mail		: [email protected]

code purpose:
	This code is a demo for how to use some
special macros -- __FILE__ __FUNCTION__ __LINE__
__DATE__ . It's funny and useful to use this Macro
to help you to debug.

	If there is something wrong with my code,
please touch me by e-mail.

**************************************************/

#include <stdio.h>

void hello(void)
{
	printf("__FILE__ :%s __FUNCTION__:%s __LINE__:%d __DATE__:%s\n",__FILE__,__FUNCTION__,__LINE__,__DATE__);
}

int main()
{
	printf("__FILE__ :%s __FUNCTION__:%s __LINE__:%d __DATE__:%s\n",__FILE__,__FUNCTION__,__LINE__,__DATE__);

	hello();

	return 0;
}

注意,这里的宏定义是不会根据运行时环境变化的,不管我在哪个目录下运行这个demo,这里的__FILE__打印出来的字符都永远提示./hello.c 以为还是当前目录,其实运行环境已经发生变化.

当然这些宏定义是十分有助于debug的.

__FUNCTION__, __LINE__ 有助于debug的宏定义,布布扣,bubuko.com

时间: 2024-12-24 22:54:47

__FUNCTION__, __LINE__ 有助于debug的宏定义的相关文章

[转] 关于VS中区分debug与release,32位与64位编译的宏定义

在vs编程中,常常涉及到32位和64位程序的编译,怎么判断当前编译是32位编译还是64位编译?如何判断 是debug下编译还是release下编译?因为之前用到,这里记录一下,省的忘了又要疯狂的google. 1.判断是debug编译还是release编译. 如果_DEBUG定义了表示是debug编译,否则是release编译. 2.判断是32位编译还是64位编译. 在 Win32 配置下,_WIN32 有定义,_WIN64 没有定义.在 x64 配置下,两者都有定义.即在 VC 下,_WIN3

(转)iOS 常用宏定义

#ifndef MacroDefinition_h #define MacroDefinition_h //-------------------获取设备大小------------------------- //NavBar高度 #define NavigationBar_HEIGHT 44 //获取屏幕 宽度.高度 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UI

iOS开发中使用宏定义提高开发效率

iOS开发中使用宏定义提高开发效率 (2013-07-10 10:47:33) 转载▼ iOS开发中,巧妙的使用宏定义,可以提高开发效率,本篇简单介绍一下宏的定义,设置,应用,并在未来实践中不断追加一些常用的宏定义. 调试Log iPhone应用程序开发调试的时候,在代码中加入NSLog的暴力调试方法是很频繁的,但是在release的时候要删除这些调试代码,那工作量是烦躁,这样的情况下,试用宏就会显得非常的方便. 看下面的例子: #ifdef DEBUG #define LOG(...) NSL

iOS常用宏定义

//-------------------获取设备大小------------------------- //NavBar高度 #define NavigationBar_HEIGHT 44 //获取屏幕 宽度.高度 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height) //-----------

预处理命令(宏定义,条件编译,头文件)

宏定义 <1>不带参数宏定义:#define PI 3.1415926 <2>带参数的宏定义: #define PI  3.1415926 #define S(r)  (PI*(r)*(r)) void main(){float  a=2,area;area=S(a); } 用宏可以得到几个结果: #define CIRCLE(R,L,S,V)  L=2*PI*(R);S=PI*(R)*(R);V=4.0/3.0*PI*(R)*(R)*(R) void main(){float r

iOS 一些常用的宏定义

iOS开发过程中使用一些常用的宏可以提高开发效率,提高代码的重用性:将这些宏放到一个头文件里然后再放到工程中的-Prefix.pch文件中(或者直接放到-Prefix.pch中)直接可以使用,灰常方便. 补充 #define mFirstLaunch mAPPVersion //以系統版本來判斷是否第一次啓動,包括升級後啓動 #define mFirstRun @"firstRun" //判斷是否第一次運行,升級後啓動不算 //一般的提示信息 #define mAlertView(ti

常使用的宏定义归类(新添加的一些)

自己新添加的一些可用常用定义:(下载地址:http://download.csdn.net/detail/hbblzjy/9570700) //安全释放 #define RELEASE_SAFELY(__Pointer) do{[__Pointer release],__Pointer = nil;} while(0) // 屏幕的物理高度 #define ScreenHeight [UIScreen mainScreen].bounds.size.height // 屏幕的物理宽度 #defi

iOS 常用的宏定义

============================================= --2015/12/9 -[ 更新 ] 1.判断是否为真机 or 模拟器[注:记得先判断是否为模拟器咯,否则会失败的哦] #if TARGET_IPHONE_SIMULATOR//模拟器 #define IS_IPHONE 0 #elif TARGET_OS_IPHONE//真机 #define IS_IPHONE 1 #endif 2.屏幕宽高 #pragma mark - 自定义宏 //考虑转屏的影响

IOS常用宏定义1

#ifndef MacroDefinition_h #define MacroDefinition_h //-------------------获取设备大小------------------------- //NavBar高度 #define NavigationBar_HEIGHT 44 //获取屏幕 宽度.高度 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UI