在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

你真的知道C語言里extern C有什么作用嗎

奈因PCB電路板設計 ? 來源:小麥大叔 ? 作者:菜刀和小麥 ? 2021-08-17 09:35 ? 次閱讀

我經常在C語言的頭文件中看到下面的代碼:

#ifdef __cplusplus extern “C” { #endif // all of your legacy C code here #ifdef __cplusplus } #endif

這通常用于C++和C混合編程的時候,為了防止C++的編譯器在編譯C文件的時候出現錯誤;

眾所周知,C++可以進行函數名重載,但是C則沒有這種功能,那這和extern “C”又有什么關系呢?

先看下面這個表格,如下所示;

語言 描述
C 函數名可以作為唯一ID和代碼段的程序建立聯系
C++ 因為重載的關系,函數名符號會被破壞,從而會根據函數的參數不同而重新生成函數符號

未添加 extern “C”

test.h

#ifndef TEST_H #define TEST_H void foo1(void); void foo2(void); void foo3(int i); #endif

test.c

void foo1(void){} void foo2(void) {} void foo3(int i){} int main(int argc,char** argv){ foo1(); foo2(); foo3(1); return 0; }

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

g++ -c test.c test.h objdump -t test.o

可以看到函數符號已經被編譯器修改了;

添加extern “C”

test.h

#ifndef TEST_H #define TEST_H #ifdef __cplusplus extern “C” { #endif void foo1(void); void foo2(void); void foo3(int i); #ifdef __cplusplus } #endif #endif

test.c

#ifdef __cplusplus extern “C” { #endif void foo1(void){} void foo2(void) {} void foo3(int i){} #ifdef __cplusplus } #endif int main(int argc,char** argv){ foo1(); foo2(); foo3(1); return 0; }

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

g++ -c test.c test.h objdump -t test.o

這時候函數符號是正確的;

extern “C” 是告訴C++的編譯器不要打我這些C函數的主意。

好了,這次分享的比較簡單,也挺實用,我們下期再見。

END

作者:菜刀和小麥

來源:小麥大叔

版權歸原作者所有,如有侵權,請聯系刪除。

編輯:jq

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

    關注

    22

    文章

    2114

    瀏覽量

    73890
  • 代碼
    +關注

    關注

    30

    文章

    4837

    瀏覽量

    69127
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49318
  • c函數
    +關注

    關注

    0

    文章

    11

    瀏覽量

    7542

原文標題:你真的知道C語言里extern“C”的作用嗎?

文章出處:【微信號:pcbgood,微信公眾號:奈因PCB電路板設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言指針學習筆記

    本文從底層內存分析,徹底讓讀者明白C語言指針的本質。
    的頭像 發表于 11-05 17:40 ?320次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>指針學習筆記

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?493次閱讀

    C語言C++中結構體的區別

    同樣是結構體,看看在C語言C++中有什么區別?
    的頭像 發表于 10-30 15:11 ?363次閱讀

    C語言與Java語言的對比

    C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優勢和特點,適用于不同的應用場景。以下將從語法特性、內存管理、跨平臺性、性能、應用領域等多個方面對C
    的頭像 發表于 10-29 17:31 ?455次閱讀

    C語言中最常見的宏定義寫法

    如果讓C語言寫個宏定義,我相信大部分同學順手就能寫出define。
    的頭像 發表于 10-28 11:12 ?385次閱讀

    hex文件如何查看原c語言代碼

    是處理器可以直接執行的指令,而 C 語言代碼則是人類可讀的高級編程語言代碼。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對程序進行分析,可以考慮以下幾種方法: 反匯編
    的頭像 發表于 09-02 10:37 ?2870次閱讀

    C++語言基礎知識

    電子發燒友網站提供《C++語言基礎知識.pdf》資料免費下載
    發表于 07-19 10:58 ?8次下載

    快速掌握C語言關鍵字

    C語言中的32個關鍵字知道多少個呢?根據關鍵字的作用分為四類:數據類型關鍵字、控制語句關鍵字、存儲類型關鍵字和其它關鍵字。1.1基本數據類
    的頭像 發表于 07-06 08:04 ?430次閱讀
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b>關鍵字

    按照這樣學習C語言,成為卷王不是夢!

    在計算機編程領域,C語言被譽為一種強大而靈活的編程語言,掌握好C語言不僅可以讓輕松駕馭各種編程
    的頭像 發表于 07-06 08:04 ?366次閱讀
    按照這樣學習<b class='flag-5'>C</b><b class='flag-5'>語言</b>,成為卷王不是夢!

    PLC編程語言C語言的區別

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

    C語言中,同一個函數能不能被定義兩次?

    稍微有點C語言基礎的同學,一定知道不能這樣做。
    的頭像 發表于 05-11 18:27 ?1915次閱讀

    幫你避雷 C語言所謂的短路現象~

    C語言短路現象算是C語言的基礎吧,不過有時候代碼寫得不規范也容易引入一些bug,所以這些操作在工程師實踐中盡量少用。雖然下面找的例子比較簡單,但如果后面是其他表達式,或許
    的頭像 發表于 03-27 08:09 ?457次閱讀
    幫你避雷 <b class='flag-5'>C</b><b class='flag-5'>語言</b>所謂的短路現象~

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

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

    C語言數據類型哪些

    C 語言中,數據類型指的是用于聲明不同類型的變量或函數的一個廣泛的系統。變量的類型決定了變量存儲占用的空間,以及如何解釋存儲的位模式。
    發表于 03-20 10:56 ?516次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>數據類型<b class='flag-5'>有</b>哪些

    C語言#define的應用

    C/C++ 編程語言中,當程序被編譯時,被發送到編譯器,編譯器將程序轉換為機器語言,然后完成編譯并執行該程序。預處理器也稱為宏預處理器。
    發表于 03-06 11:29 ?434次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>#define的應用
    主站蜘蛛池模板: 国产三级香港三级人妇 | 色老头视频在线观看 | 在线色视频网站 | 狼色在线视频 | 日本高清高色 | 久久黄色视屏 | 四虎永久影院 | 爱爱免费小视频 | 欧美日本一区二区三区生 | 久久久国产精品免费看 | 91精品国产色综合久久不卡蜜 | 天天成人 | 久久美女精品国产精品亚洲 | 天天曰 | www在线视频在线播放 | 99色视频在线观看 | 天天干天天做天天操 | 永久免费人成网ww555kkk手机 | 美女视频黄a全部 | 日本免费三级网站 | 美女和帅哥在床上玩的不可描述 | 456主播喷水在线观看 | 黄色美女免费网站 | 男人免费看片 | 美女扒开腿让男人桶尿口 | 亚洲四虎永久在线播放 | 国产一级特黄老妇女大片免费 | 一区二区三区在线观看免费 | 五月综合色啪 | mm131美女肉体艺术图片 | 免费网站在线视频美女被 | 黄在线网站 | 欧美午夜视频一区二区三区 | 午夜视频1000部免费看 | 色精品一区二区三区 | 亚洲成色在线综合网站 | 天堂在线最新资源 | 男女交性视频免费视频 | 国产美女视频黄a视频免费全过程 | 欧美另类图片亚洲偷 | 黄h视频|