为了账号安全,请及时绑定邮箱和手机立即绑定

C++ __FILE__

C++ __FILE__

C++
牧羊人nacy 2018-07-29 21:21:03
#include <iostream>using namespace std;#line 200 "I THANK YOU"//这是改变本文件的名字吗?书上是这样说的,但是我编译后,运行结果输出的当前文件名字是变了,但是文件本身的名字却没有变,也就在电脑看到的文件名字没有变。int main(){cout << __LINE__ << endl;cout << __FILE__ << endl;system("pause");return 0;}#line 200 "I THANK YOU"//这是改变本文件的名字吗?书上是这样说的,但是我编译后,运行结果输出的当前文件名字是变了,但是文件本身的名字却没有变,也就在电脑看到的文件名字没有变。请问这确切的具体解释是什么?
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

首先你要知道__FILE__和__LINE__这两个宏.
是编译器加上去的,默认的__FILE__是const char*类型,即常量字符串,记录了源文件的名称.
__LINE__是源文件中,引用了这个宏的行,它的行号.
你可以试试:
cout << __LINE__ << endl;
cout << __LINE__ << endl;
两个行,连续输出两个__LINE__,那么第二个输出的值是第一个的值+1..

#line 200 "I THANK YOU"告诉编译器预处理时将文件名定为"I THANK YOU",
并将#line 200 "I THANK YOU"这一行定为第200行,后面的行就从201开始.

所以#line 200 "I THANK YOU"只是改了编译器的两个常量,并不是真正的修改文件名.

这两个宏主要用于调试,出错的时候可以找到是哪个文件,哪一行.
比如
char buffer[256];
sprintf(buffer,"%s(%d):debug test only ...",__FILE__,__LINE__);
OutputDebugString(buffer);
运行完之后你看VC的output窗口里是不是有这个输出的消息,双击它....

查看完整回答
反对 回复 2018-08-01
  • 1 回答
  • 0 关注
  • 1072 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信