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__关键字(预定义宏)相关推荐

  1. C语言预定义宏 __func__、__FUNCTION__、__LINE__、__FILE__、__DATE__、__TIME__

    文章目录 20211231 打印示例 今天看RXW源码的时候,看到了在函数里使用 __func__ 参数的样例,遂查一下这两玩意的使用方法 这玩意叫做预定义宏 标准C语言预处理要求定义某些对象宏,每个 ...

  2. C语言—预定义宏调试__LINE__、__func__

    前言:最近在阅读程序源码中出现了__LINE__和__func__字样,做下笔记.针对以下调试信息语句: task_mg_printf("no next task err!!, fun = ...

  3. ANSI C and Microsoft C++中常用的预定义宏以及 宏定义中 # 和 ## 的区别

    ANSI C and Microsoft C++中常用的预定义宏以及 宏定义中 # 和 ## 的区别 第一部分,常见的预定义宏 第二部分,# 和 ## 再宏定义中的使用说明 第三部分,类似 #prag ...

  4. C语言中预定义宏的应用

    __LINE__                       在源代码中插入当前源代码行号         __FILE__                       在源代码中插入当前源代码文件名 ...

  5. C标准中一些预定义的宏,如__FILE__,__func__等

    C标准中一些预定义的宏 C标准中指定了一些预定义的宏,对于编程经常会用到.下面这个表中就是一些常常用到的预定义宏. 宏 意义 __DATE__ 进行预处理的日期("Mmm dd yyyy&q ...

  6. C predefined macros __FILE__,__LINE__,__func__

    C predefined macros __FILE__,__LINE__,__func__ \_MSC_VER \_\_FILE\_\_,\_\_LINE\_\_,\_\_func__ 參考連結 _ ...

  7. Java实现类似C/C++中的__FILE__、__FUNC__、__

    原文地址 import java.text.SimpleDateFormat; import java.util.Date; /** * Java实现类似C/C++中的__FILE__.__FUNC_ ...

  8. C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示

    本文演示了C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用. 这几个预定义符的名称就没必要再介绍了,顾名思义嘛. // ...

  9. C 预处理器 —— __DATE__ # __TIME__ # __FILE__ # __LINE__ # __STDC__ (预处理宏的使用 —— 打印debug信息:)

    预定义宏: ANSI C 定义了许多宏.在编程中您可以使用这些宏,但是不能直接修改这些预定义的宏. 宏    描述 __DATE__    当前日期,一个以 "MMM DD YYYY&quo ...

最新文章

  1. LightRoom操作快捷键
  2. linux nobody 用户,Linux CentOS7安装配置tomcat8(使用非root用户/nobody用户运行)
  3. vivo手机解锁工具_屏幕指纹优势凸显,vivo持续研发致力打造全屏指纹解锁
  4. CSS reset 标签初始化设置
  5. 推荐算法炼丹笔记:如何让你的推荐系统具有可解释性?
  6. CMOS图像传感器——图像传感器噪声
  7. 自动检查点(Automatic Checkpointing)
  8. BroadcastReceiver详解
  9. Json.Net学习笔记(十二) 协议解析
  10. 在Orderby子句中使用CASE 语句
  11. 客户端可以连接 .Net程序不能连接SQL Server 2000
  12. 马化腾和朱啸虎互怼之后,摩拜ofo合并可能性基本为零
  13. java统计 pv uv_统计网址的pv,uv(附带Spring定时器)
  14. 关于中国教育出来的学生
  15. 手机怎么绑定邮箱微信,邮箱可以登录微信吗?
  16. 安装keil5出现you are not logged in as an 'Administrator'
  17. Camera基本概念
  18. Java学习之while循环及案例
  19. 哔哩哔哩导航背景写法
  20. P6058 二分 + Tarjan + 尺取法

热门文章

  1. matlab矢量相乘并打印显示
  2. MATLAB修改工作环境
  3. apache php ffmpeg,linux(php环境) 安装ffmpeg
  4. mybatis 配置文件中set丢失逗号
  5. 高并发高可用系统应对策略的一些思考
  6. 使用openssl给web站点颁发证书
  7. linux下screen工具使用
  8. Linux下防御arp***的方法
  9. Cisco Easy ***综合配置示例
  10. 发现问题,是解决问题的第一步