C++ __FILE__

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:31:20
#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"//这是改变本文件的名字吗?书上是这样说的,但是我编译后,运行结果输出的当前文件名字是变了,但是文件本身的名字却没有变,也就在电脑看到的文件名字没有变。

请问这确切的具体解释是什么?

首先你要知道__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窗口里是不是有这个输出的消息,双击它....