【C/C++】中的__FILE__、__LINE__、#line、__func__关键字(预定义宏)
c++11预先定义了一些标识符,其实也就是宏。现在简单说几个:
1、__FILE__用于指示本行语句所在源文件的文件名,如下(test.c):
#include <stdio.h>
void main()
{printf("%s\n", __FILE__);
}=====>>GCC编译执行结果为:
=====>> "test.c"
=====>>Windows的VC6.0编译执行结果为:
=====>> "c:\documents and settings\administrator\桌面\test.c"
2、__LINE__用于指示本行语句在源文件中的位置信息,如下:
#include <stdio.h>
void main()
{printf("%d\n", __LINE__);printf("%d\n", __LINE__);printf("%d\n", __LINE__);
};=====>>输出结果为:
=====>> 4
=====>> 5
=====>> 6
3、#line来用于重新设定__LINE__的值,如下:
#include <stdio.h>
#line 200 //指定下一行的__LINE__为200
void main()
{printf("%d\n", __LINE__);printf("%d\n", __LINE__);printf("%d\n", __LINE__);
};=====>>输出结果为:
=====>> 202
=====>> 203
=====>> 204
4、__func__用于指示所在的函数(该关键字gcc支持,windows下的vc6.0不支持)。如下:
#include <string>
#include <iostream>
using namespace std;
const char* hello() { return __func__; }
const char* world() { return __func__; }int main(){cout << hello() << ", " << world() << endl; // hello, world
}
上面代码中,我们定义了两个函数hello和world。利用__func__预定义标识符,我们返回了函数的名字,并将其打印出来。事实上,按照标准定义,编译器会隐式地在函数的定义之后定义__func__标识符。比如上述例子中的hello函数,其实际的定义等同于如下代码:
const char* hello() {static const char* __func__ = "hello";return __func__;
}
__func__预定义标识符对于轻量级的调试代码具有十分重要的作用。而在C++11中,标准甚至允许其使用在类或者结构体中。我们可以看看下面这个例子:
#include <iostream>
using namespace std;struct TestStruct {TestStruct () : name(__func__) {}const char *name;
};int main() {TestStruct ts;cout << ts.name << endl; // TestStruct
}
从代码可以看到,在结构体的构造函数中,初始化成员列表使用__func__预定义标识符是可行的,其效果跟在函数中使用一样。不过将__fun__标识符作为函数参数的默认值是不允许的,如下例所示:
void FuncFail( string func_name = __func__) {};// 无法通过编译
这是由于在参数声明时,__func__还未被定义。
【C/C++】中的__FILE__、__LINE__、#line、__func__关键字(预定义宏)相关推荐
- C语言预定义宏 __func__、__FUNCTION__、__LINE__、__FILE__、__DATE__、__TIME__
文章目录 20211231 打印示例 今天看RXW源码的时候,看到了在函数里使用 __func__ 参数的样例,遂查一下这两玩意的使用方法 这玩意叫做预定义宏 标准C语言预处理要求定义某些对象宏,每个 ...
- C语言—预定义宏调试__LINE__、__func__
前言:最近在阅读程序源码中出现了__LINE__和__func__字样,做下笔记.针对以下调试信息语句: task_mg_printf("no next task err!!, fun = ...
- ANSI C and Microsoft C++中常用的预定义宏以及 宏定义中 # 和 ## 的区别
ANSI C and Microsoft C++中常用的预定义宏以及 宏定义中 # 和 ## 的区别 第一部分,常见的预定义宏 第二部分,# 和 ## 再宏定义中的使用说明 第三部分,类似 #prag ...
- C语言中预定义宏的应用
__LINE__ 在源代码中插入当前源代码行号 __FILE__ 在源代码中插入当前源代码文件名 ...
- C标准中一些预定义的宏,如__FILE__,__func__等
C标准中一些预定义的宏 C标准中指定了一些预定义的宏,对于编程经常会用到.下面这个表中就是一些常常用到的预定义宏. 宏 意义 __DATE__ 进行预处理的日期("Mmm dd yyyy&q ...
- C predefined macros __FILE__,__LINE__,__func__
C predefined macros __FILE__,__LINE__,__func__ \_MSC_VER \_\_FILE\_\_,\_\_LINE\_\_,\_\_func__ 參考連結 _ ...
- Java实现类似C/C++中的__FILE__、__FUNC__、__
原文地址 import java.text.SimpleDateFormat; import java.util.Date; /** * Java实现类似C/C++中的__FILE__.__FUNC_ ...
- C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示
本文演示了C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用. 这几个预定义符的名称就没必要再介绍了,顾名思义嘛. // ...
- C 预处理器 —— __DATE__ # __TIME__ # __FILE__ # __LINE__ # __STDC__ (预处理宏的使用 —— 打印debug信息:)
预定义宏: ANSI C 定义了许多宏.在编程中您可以使用这些宏,但是不能直接修改这些预定义的宏. 宏 描述 __DATE__ 当前日期,一个以 "MMM DD YYYY&quo ...
最新文章
- LightRoom操作快捷键
- linux nobody 用户,Linux CentOS7安装配置tomcat8(使用非root用户/nobody用户运行)
- vivo手机解锁工具_屏幕指纹优势凸显,vivo持续研发致力打造全屏指纹解锁
- CSS reset 标签初始化设置
- 推荐算法炼丹笔记:如何让你的推荐系统具有可解释性?
- CMOS图像传感器——图像传感器噪声
- 自动检查点(Automatic Checkpointing)
- BroadcastReceiver详解
- Json.Net学习笔记(十二) 协议解析
- 在Orderby子句中使用CASE 语句
- 客户端可以连接 .Net程序不能连接SQL Server 2000
- 马化腾和朱啸虎互怼之后,摩拜ofo合并可能性基本为零
- java统计 pv uv_统计网址的pv,uv(附带Spring定时器)
- 关于中国教育出来的学生
- 手机怎么绑定邮箱微信,邮箱可以登录微信吗?
- 安装keil5出现you are not logged in as an 'Administrator'
- Camera基本概念
- Java学习之while循环及案例
- 哔哩哔哩导航背景写法
- P6058 二分 + Tarjan + 尺取法