我是(被)使用__FILE__
和__LINE__
宏從我的代碼中打印診斷消息。當使用GCC和make時,這種方式效果很好,該文件與您在命令行中指定的一樣短。我最近轉而使用CodeLite,它在構建時使用完全限定的文件名(至少在windows下)。突然間,我的診斷輸出幾乎不可讀。如何在預處理器中獲取文件名?
有沒有辦法在預處理器中只獲取文件名的文件組件?我可以與非便攜式GCC特定解決方案一起生活。 (我將回退到普通__FILE__
其他情況。)
當然,我可以通過函數傳遞的__FILE__
的內容,而只提取文件組件,但字符串操作是不是我所想的是不應該改變的診斷消息運行時行爲...
注意:我使用GNU使用它的方式使用文件名。 Path是文件名的集合,文件名是文件的相對或絕對標識符。文件名可以由目錄組件和文件組件組成。
診斷確實會改變運行時行爲(否則不會有診斷),並且您是否調用一個額外的函數幾乎沒有什麼區別,因爲輸出本身調用庫函數來完成輸出。 – eudoxos
除了數十個字符串操作之外,打印診斷消息通常還涉及一些不那麼良性的文件I/O操作。出於某種原因,似乎沒有人擔心這一點。爲什麼要擔心增加對僅影響診斷消息的無副作用功能的調用? –
你們都是對的,加入診斷不是免費的。我是這樣實現的,我讓它通過一個函數。我更懷疑它是否存在。這當然不是標準的,但是找到關於這方面的文檔並不完美。 (甚至gcc手冊也沒有概述每個預定義的宏。) – rioki