#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 關注
- 1138 瀏覽
添加回答
舉報
0/150
提交
取消