C與C++的兼容性

C語言和C + + 的關係相當密切 ， 但是也存在許多顯著的差異 。 C++ 標準起源於早期C標準 ， 並被設計爲與當時的C語言在源代碼編寫和鏈接方面很大程度上兼容. 因此 ， 兩種語言的開發工具 （ 例如IDE和編譯器 ） 通常被集成到單個產品中 ， 程序員可以自己選擇編寫的是C還是C + + ， 開發工具通常會根據程序員的選擇使用不同的編譯器和鏈接器或不同的庫 。 但是 ， C並不是C + + 的子集 ， 一般的 C 代碼不經修改很難被一些嚴格符合C + + 標準的C + + 編譯器成功編譯 ； 同樣 ， C++ 引入了許多 C 中沒有的特性 ， 所以 ， 幾乎所有用 C++ 編寫的代碼都無法被 C 編譯器成功編譯 。 在這篇文章中 ， 我們主要討論的是它們在公共部分的差異 ， 比如在C語言中合法的代碼到了C + + 中成爲了不合法的代碼 ， 或一段代碼在C和C + + 中表現出不同的行爲 。 C++ 的創始人Bjarne Stroustrup建議 C和C + + 應該儘可能減小差異 ， 以最大限度地提高這兩種語言的兼容性 ； 而另一些人則認爲C和C + + 畢竟是兩種不同的語言 — — 雖然C + + 起源於C — — 因此它們之間的兼容性並不是那麼重要 。 而ANSI是這樣看的 ： 「 我們贊同保持C與C + + 的最大公共子集原則 」 ， 同時 「 保持它們的差別 ， 使這兩種語言繼續獨立發展 」 ， 「 ...... 委員會希望C + + 成爲重要的和強有力的語言 。 」 截止到C + +20 和C2x ， C++ 還是不支持部分C語言特性 ， 如變長數組 ， 原生複數支持和restrict 。 另一方面 ， 與C89相比 ， C99通過合併C + + 功能 （ 例如 / / 註釋 ， 允許聲明出現在代碼中而不只是在函數頭 ） 減少了一些其他不兼容性 。