猿问

C++ __FILE__

#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"//这是改变本文件的名字吗?书上是这样说的,但是我编译后,运行结果输出的当前文件名字是变了,但是文件本身的名字却没有变,也就在电脑看到的文件名字没有变。

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

牧羊人nacy
浏览 1069回答 1
1回答

尚方宝剑之说

首先你要知道__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窗口里是不是有这个输出的消息,双击它....
随时随地看视频慕课网APP
我要回答