#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窗口里是不是有这个输出的消息,双击它....
- 1 回答
- 0 关注
- 1072 浏览
添加回答
举报
0/150
提交
取消