在C程式中呼叫被C編譯器編譯後的函式,為什麼要加extern「C」宣告

2022-05-06 14:26:56 字數 539 閱讀 1733

1樓:樑昌仔

簡單來說就是:函式和變數被c++編譯後在符號庫中的名字與c語言的不同,被extern "c"修飾的變數和函式是按照c語言方式編譯和連線的。由於編譯後的名字不同,c++程式不能直接呼叫c 函式。

c++提供了一個c 連線交換指定符號extern「c」來解決這個問題。

2樓:你猜我猜哇擦猜

總之,重點就是c++裡面支援函式的過載,因此編譯出來的.obj或者庫檔案裡面,函式名會被加上和引數有關的簽名,用來區分同樣函式名引數不同的函式。然而c語言不支援過載,所以函式名裡面沒有這樣的簽名。

這樣,當c語言的程式呼叫c++寫成的庫的時候,就會找不到函式。

比如,一個函式叫 void foo(int bar)之類的,可能會在c++編譯成叫 foo_i之類的名字,而在c語言裡面就會編譯成foo,這樣c語言的程式去找foo就會找不到,這樣連線的時候會出錯。

為了解決這個問題,引入了extrn "c"{},在這個的作用域之內,c++的函式名不會加上引數簽名,和c語言的標準保持統一,就相容c語言的程式了。

如何用c寫編譯器,如何用c寫一個編譯器

先學編譯原理。然後根據步驟,1 處理預編譯 2 詞法分析 3 語法分析 4 語義分析 5 中間 轉換 6 二進位制 生成。簡單起見,不需要考慮優化。初期可以不需要支援太多語法。怎樣去寫一個編譯器 用c語言寫c語言編譯器 需 這個需要考慮到很多的問題 各種錯誤的型別 以及可能出現的情況 這個可以先去看...

急求c語言編譯器本人是新手!現在網上的編譯器眾多,種類繁多,真不知道選哪款最好是中文的

vc 6.0就很好用啊。我新手入門就用的它啊。如果不會用可以給我發資訊。我可以給你解答。給你gcc你會用麼?還是老實的用vc吧,編譯器是次要的,關鍵是能寫出好程式才行。原本進來是準備拿分的,看了你寫的內容真是讓人忍不住說你 tc,c free,vc 都還不錯啊。另外還有pgcc,gcc,pathsc...

跪求C語言編輯器和編譯器,加急本人新手,哪位大神肯幫下忙

vs2008,vc6.0,codeblock,好多呢。不過最好根據你的開發環境選擇相應的ide。dev c 不錯的c c 編譯器。c free就可以了啊,我們初學c語言時就是使用這個 新手建議用codeblocks這裡還有使用教程 希望對內 你有幫助哈容 新手先用vc好一點,c語言新手 哪位大神幫個...