2010-08-16 105 views

回答

2

這是一個沉重的執行細節。但是我所知道的大多數C++編譯器都不會嘗試做任何特殊的事情來區分C函數和非C++函數。只是簡單的舊的cdecl調用約定。

有點重要,因爲具有像printf()這樣的函數的CRT實現與C++編譯器一樣可以使用來自同一供應商的C++編譯器。沒有人想要維護它的兩個版本。

+0

作爲參考,「extern」C「因子如何? – cHao 2010-08-16 23:06:04

+1

@cHao它停止了C++爲支持運算符重載而停止的名稱修飾,例如'foo(int)'和'foo(double)'可能在編譯器發出的程序集中轉換爲'foo_int'和'foo_double',但是'extern「C」foo(int)'和'extern「C」foo雙)'都簡單地轉換爲'foo' – 2010-08-16 23:13:27

+0

它改變了鏈接器所看到的標識符的名稱。關閉C++名稱修改。所有傳統的CRT函數都在C++編譯器看到的聲明中是extern「C」。 – 2010-08-16 23:14:22

3

C++編譯器'做正確的事情'併爲C函數使用正確的調用約定 - 一個蹩腳的聽起來的答案,但我不知道還有更多的可以說!