0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

C語言里extern "C" 是什么意思?

Q4MP_gh_c472c21 ? 來源:CSDN博客 ? 作者:CSDN博客 ? 2020-09-07 11:09 ? 次閱讀

經(jīng)常在C語言的頭文件中看到下面的代碼:

#ifdef__cplusplus extern"C"{ #endif //allofyourlegacyCcodehere #ifdef__cplusplus } #endif

這通常用于C++和C混合編程的時候,為了防止C++的編譯器在編譯C文件的時候出現(xiàn)錯誤;眾所周知,C++可以進行函數(shù)名重載,但是C則沒有這種功能,那這和extern "C"又有什么關系呢?
先看下面這個表格,如下所示;

未添加 extern "C"

test.h

#ifndefTEST_H #defineTEST_H voidfoo1(void); voidfoo2(void); voidfoo3(inti); #endif

test.c

voidfoo1(void){} voidfoo2(void){} voidfoo3(inti){} intmain(intargc,char**argv){ foo1(); foo2(); foo3(1); return0; }

編譯這兩個文件,生成test.o文件,通過objdump查看函數(shù)符號;

g++-ctest.ctest.h objdump-ttest.o

可以看到函數(shù)符號已經(jīng)被編譯器修改了;

添加extern "C"

test.h

#ifndefTEST_H #defineTEST_H #ifdef__cplusplus extern"C"{ #endif voidfoo1(void); voidfoo2(void); voidfoo3(inti); #ifdef__cplusplus } #endif #endif

test.c

#ifdef__cplusplus extern"C"{ #endif voidfoo1(void){} voidfoo2(void){} voidfoo3(inti){} #ifdef__cplusplus } #endif intmain(intargc,char**argv){ foo1(); foo2(); foo3(1); return0; }

編譯這兩個文件,生成test.o文件,通過objdump查看函數(shù)符號;

g++-ctest.ctest.h objdump-ttest.o

這時候函數(shù)符號是正確的;

extern "C"是告訴C++的編譯器不要打我這些C函數(shù)的主意。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7575

    瀏覽量

    134130

原文標題:長見識:你真的知道C語言里extern "C" 的作用嗎?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    PLC編程語言C語言的區(qū)別

    在工業(yè)自動化和計算機編程領域中,PLC(可編程邏輯控制器)編程語言C語言各自扮演著重要的角色。盡管兩者都是編程語言,但它們在多個方面存在顯著的區(qū)別。本文將從多個維度深入探討PLC編程
    的頭像 發(fā)表于 06-14 17:11 ?1592次閱讀

    C語言基礎-為什么要使用C?

    當今最流行的 Linux 操作系統(tǒng)和 RDBMS(Relational Database Management System:關系數(shù)據(jù)庫管理系統(tǒng)) MySQL 都是使用 C 語言編寫的。
    發(fā)表于 03-25 11:20 ?293次閱讀

    plc編程語言c語言的聯(lián)系 c語言和PLC有什么區(qū)別

    PLC編程語言C語言的聯(lián)系 PLC(可編程邏輯控制器)是一種針對自動化控制系統(tǒng)的特殊計算機。PLC編程語言是為了控制和管理自動化生產(chǎn)過程中的各種設備而設計的。與之相比,
    的頭像 發(fā)表于 02-05 14:21 ?3159次閱讀

    c語言,c++,java,python區(qū)別

    C語言、C++、Java和Python是四種常見的編程語言,各有優(yōu)點和特點。 C語言
    的頭像 發(fā)表于 02-05 14:11 ?1382次閱讀

    vb語言c++語言的區(qū)別

    VB語言C++語言是兩種不同的編程語言,雖然它們都屬于高級編程語言,但在設計和用途上有很多區(qū)別。下面將詳細比較VB
    的頭像 發(fā)表于 02-01 10:20 ?1534次閱讀

    C語言C++中那些不同的地方

    C語言雖說經(jīng)常和C++在一起被大家提起,但可千萬不要以為它們是一個東西?,F(xiàn)在我們常用的C語言C
    的頭像 發(fā)表于 12-07 14:29 ?774次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>和<b class='flag-5'>C</b>++中那些不同的地方

    C/C++語言extern的用法

    現(xiàn)代編譯器一般采用按文件編譯的方式,因此在編譯時,各個文件中定義的全局變量是互相透明的,也就是說,在編譯時,全局變量的可見域限制在文件內(nèi)部。下面舉一個簡單的例子。創(chuàng)建一個工程,里面含有A.cpp和B.cpp兩個簡單的C++源文件。
    的頭像 發(fā)表于 11-29 14:34 ?505次閱讀

    C語言運行環(huán)境是什么

    C語言運行環(huán)境(C language runtime environment)是指在執(zhí)行C語言程序時所需的軟件及硬件環(huán)境。
    的頭像 發(fā)表于 11-27 16:13 ?2861次閱讀

    如何選擇創(chuàng)建c語言c++

    選擇創(chuàng)建 C 語言C++ 都需要綜合考慮多個因素。在決定使用哪種語言之前,我們需要對這兩種語言的特點、優(yōu)缺點、適用場景、學習成本等進行全
    的頭像 發(fā)表于 11-27 15:58 ?458次閱讀

    \0在c語言中怎么用

    C語言是一種廣泛使用的程序設計語言,具有高效、簡潔和可移植等特點。本文將詳盡介紹C語言的基本語法、數(shù)據(jù)類型、控制結(jié)構(gòu)、函數(shù)及庫函數(shù)等內(nèi)容,以
    的頭像 發(fā)表于 11-24 09:59 ?2709次閱讀

    C語言課程設計案例

    電子發(fā)燒友網(wǎng)站提供《C語言課程設計案例.rar》資料免費下載
    發(fā)表于 11-20 10:51 ?5次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>課程設計案例

    C語言進階之嵌入式系統(tǒng)高級C語言編程

    電子發(fā)燒友網(wǎng)站提供《C語言進階之嵌入式系統(tǒng)高級C語言編程.rar》資料免費下載
    發(fā)表于 11-18 10:32 ?1次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>進階之嵌入式系統(tǒng)高級<b class='flag-5'>C</b><b class='flag-5'>語言</b>編程

    C語言中關鍵詞extern用法的一個注意事項

    在做項目開發(fā)時,在一個單片機C語言程序(用keil開發(fā))中
    的頭像 發(fā)表于 11-02 14:42 ?454次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中關鍵詞<b class='flag-5'>extern</b>用法的一個注意事項

    請問C語言extern通常怎么使用?

    C語言extern通常怎么使用?哪位大神指點一下。
    發(fā)表于 10-08 10:55

    C語言指針講解

      C語言可以說是工科學生必不可少的編程語言了,尤其是嵌入式的應用中C語言更是大廈之基,甚至在我的評價
    發(fā)表于 10-01 13:25 ?261次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>指針講解