看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Visual Studio C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) N/A 問題(Question): 最近發現一個很好的程式心得網頁,我的問題是在其中一篇 我把它節錄過來方便各位觀看 ===== 以下來源:http://www.jeffhung.net/blog/articles/jeffhung/237/ ===== 在 C/C++ 裡 debug 的時候,__FILE__ 和 __LINE__ 很好用, 可以幫我們將錯誤發生的地點指出來。 可是,因為 __FILE__ 對應的型別是 const char* (__LINE__ 對應的型別是 size_t), 在使用 wide character I/O 的時候,便不能用。 就算像 L"some string" 一樣,前面加一個 L 也不行, 因為這樣子就變成了 L__FILE__,是另外一個 symbol 了。 空一格也不行,因為 L"some string" 的 L 必須與引號直接連接。 還好,使用 ## 這個 preprocessor operator 可以解決這個問題 #define WIDEN_(x) L##x #define WIDEN(x) WIDEN_(x) #define __WFILE__ WIDEN(__FILE__) ===== 以上來源:http://www.jeffhung.net/blog/articles/jeffhung/237/ ===== 重要的程式碼只有一行「cout << __WFILE__ << endl;」 照他所說的直接用 #define __WFILE__ WIDEN(L##__FILE__) 定義會顯示找不到 symbol 這個我可以理解,因為他說會變成新的 symbol: L__FILE__ 但是為什麼用兩行去定義(如下)也是顯示找不到 symbol: L__FILE__ #define WIDEN(x) L##x #define __WFILE__ WIDEN(__FILE__) 而用三個 #define (如網頁內文)就找的到可以通過編譯了? 他的這一行 #define WIDEN(x) WIDEN_(x) 並沒有代換到什麼 沒有什麼實質的作用不是嗎?我想了好久都想不到其中的道理 可否麻煩各位大大給我一點提示,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.61.122.2 ※ 編輯: dbzgtgwduo 來自: 210.61.122.2 (12/13 02:53)
loveme00835: #1CKjm79n 12/13 06:09
handsome616:版上怎麼這麼多神人 12/13 12:37