vc++6.0與新版編譯器多了哪些注意事項(1)

菲菲龙發表於2024-12-08

VC6++,這是一個比較老的編譯器了,對 C++ 標準支援存在一些侷限性,

一.關於 warning C4003: not enough actual parameters for macro 'getc' 警告及相關錯誤
原因分析:在 C 語言的標準庫中有一個名為 getc 的宏(通常用於從檔案流中讀取字元等操作),程式碼裡定義了名為 getc 的類 point 的靜態成員函式,當編譯器處理到你呼叫 point::getc 時,它可能會先嚐試按照 C 語言的宏展開機制去處理 getc,誤以為這是在呼叫那個標準庫宏但引數個數不對(因為你是作為無引數函式呼叫的),所以產生了這個警告以及後續類似的報錯(像在 point::getc 相關呼叫處報語法錯誤相關的錯)。》》》》》》這老編譯器容易出現命名衝突導致的問題。《《《《《《
遇到這種情況改個名就好了

而dev較新版本的不會出現這種情況

二.在 C++ 中,複製建構函式通常最好加上const修飾符,這是一種良好的程式設計習慣,也是為了遵循 C++ 的常量正確性原則。
VC++6.0 對 C++ 標準的遵循相對更嚴格一些,它強調這種常量正確性,要求明確地使用const來保證引數在函式內部不會被意外修改.

加上const關鍵字後

Dev-C++ 在編譯時可能對這種情況不會報錯,它可能會自動進行一些隱式的轉換或處理,使得在沒有顯式新增const的情況下也能透過編譯。

當然,但這並不意味著在 Dev-C++ 中不需要遵循常量正確性原則,只是它在編譯時的處理方式不同。


const 的作用:當一個物件作為引數傳遞給複製建構函式時,加上const修飾表示該函式不會修改傳入物件的狀態,這在語義上更加明確和清晰。

相關文章