我們在我們的代碼中使用了一些在當今標準中無效的指令。 例如。 #COMMENT1忽略cpp中的無效指令
這用於在非常舊版本的gcc(2.x)中工作。我試圖把它移到新的gcc(4.x),但我得到的錯誤,如: 「錯誤:無效的預處理指令#評論1」
簡單修復是改變#爲//在那些指令,但由於其他依賴關係,我們無法做到這一點。
問題是,有沒有辦法告訴cpp忽略這些無效的指令?
但是它應該將有效的指令,因爲它應該如的#ifndef的#define等
謝謝!
我們在我們的代碼中使用了一些在當今標準中無效的指令。 例如。 #COMMENT1忽略cpp中的無效指令
這用於在非常舊版本的gcc(2.x)中工作。我試圖把它移到新的gcc(4.x),但我得到的錯誤,如: 「錯誤:無效的預處理指令#評論1」
簡單修復是改變#爲//在那些指令,但由於其他依賴關係,我們無法做到這一點。
問題是,有沒有辦法告訴cpp忽略這些無效的指令?
但是它應該將有效的指令,因爲它應該如的#ifndef的#define等
謝謝!
你沒有說你爲什麼
cannot change # to // in those directives
我猜你有一些工具或取決於他們的腳本。您應該更新這些以遵循當前的標準。
也許更獨特的或不可能的後綴可以幫助你,例如使用//#COMMENT
代替#COMMENT
但本質上,你所要求或多或少符合標準的編譯器來了解非標準和過時的語言特性,並這實質上是無望的。或者,你可以修補最近的GCC源代碼(例如GCC 4.6之一)來遵循你的要求,但我認爲這不是一個好主意(甚至GCC 4.6的插件能力都不能幫助你在這裏,因爲在它的預處理器中沒有插件鉤子)。
我的建議仍然是改變你的源代碼以符合當前的標準。這幾乎從來都不是時間損失。
我得到這些錯誤(g ++ 4.5.4),因爲預處理器關鍵字區分大小寫。
#DEFINE _HEADER_FILE_
#ENDIF
會失敗,而
#define _HEADER_FILE_
#endif
也就過去了。巴西爾雖然說得好。趕上更新的編譯器標準值得您一段時間。
在Linux上CPP有一個標誌,試圖模仿傳統的C風格的預處理器
從CPP手冊頁:
-traditional-cpp
Try to imitate the behavior of old-fashioned C preprocessors, as opposed to ISO C preprocessors.