国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

C語言與C++相互調用

strongerHuang ? 來源:strongerHuang ? 作者:嵌入式情報局 ? 2021-01-18 11:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1C與C++相互調用

在一個嵌入式系統中大部分的底層和驅動層更多的是采用C語言來進行開發,而上層應用、服務更多的采用C++等高級語言來進行面向對象等方面的開發方式,那么就存在一個上層調用底層接口的問題,比如最常用的C++調用C的接口來完成相應的外設驅動接口。

我們知道C++幾乎是完全兼容C的,不同的編譯語言都有其自身的一套編譯規則,當然C語言與C++的編譯規則是不同的,但C++編譯器為了兼容C語言相當于兼容了C語言編譯方式,而C語言編譯器一般就不會去兼容C++的編譯方式。

d2761992-58f7-11eb-8b86-12bb97331649.png

所以理論上來說用C編譯器編譯好的模塊能夠直接通過C++來進行調用才對。

2extern關鍵字

由于C++編譯器默認都是按照C++的編譯方式來對源文件進行編譯,這樣C語言文件也會直接采用C++編譯。

對于底層的驅動等都會以使用C語言編寫的DLL等給出來,然后從中導出函數給C或C++的模塊來進行訪問,所以還是需要C++語法中能夠標識出來給編譯器,哪些需要采用C++方式編譯,哪些需要采用C方式編譯。

那么這個編譯區分就由extern “C”來完成,下面我們就以一個例子看看如何使用的。

//FileName:main.c
#include
#include
#include"Cal.h"

intmain(intargc,char**argv){

printf("Cal(int):%d
",Cal(5));
printf("Cal(float):%.5f
",Cal(1.1f));
return0;
}
//FileName:Cal.c
#include"Cal.h"

intCal(intVal)
{
returnVal*Val;
}

floatCal(floatVal)
{
returnVal*Val;
}

//FileName:Cal.h
#ifndef__CAL_H__
#define__CAL_H__

//extern"C"
//{

intCal(intVal);
floatCal(floatVal);

//}
#endif

以上extern “C”注釋部分表示的就是Cal.c文件將會以C編譯方式進行,由于C++支持函數重載而C語言不支持函數重載,所以以上源碼可以直接編譯可以通過,而一旦把extern“C”注釋去掉,便會編譯失敗。

3互調操作

d299372e-58f7-11eb-8b86-12bb97331649.png

上面小哥畫了一張互調的簡圖,并分別解釋一下:

1)C++編譯器通過extern “C”即可直接調用以C方式編譯的庫文件,最終與其他文件一起編譯成為一個可執行文件。

2)C++編譯器首先將模塊用extern “C”方式編譯好,C編譯器直接拿了該模塊文件與其他文件一起編譯生成可執行文件。

4小技巧

在C++編譯器內部一般都會內置__cplusplus這樣一個宏定義,那么我們可以通過使用該宏來設置一個預編譯結構,當在C++編譯器下就使用extern “C”編譯C模塊代碼,否則就剔除,相信大家在一些庫文件中經常看到。

#ifdef__cplusplus
extern"C"
{
#endif

//fuctiondefinitionordeclaration

#ifdef__cplusplus
}
#endif

責任編輯:xj

原文標題:C代碼與C++互相調用的小技巧

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

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

    關注

    183

    文章

    7644

    瀏覽量

    145561
  • C++
    C++
    +關注

    關注

    22

    文章

    2123

    瀏覽量

    77110
  • 代碼
    +關注

    關注

    30

    文章

    4967

    瀏覽量

    73954

原文標題:C代碼與C++互相調用的小技巧

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    keil實現cc++混合編程

    參考touchgfx生成的代碼,發現了一個不需要添加--cpp11 參數的解決方法,具體操作如下。 一、創建一個空白的C文件和頭文件在頭文件中定義c++文件中需要調用的函數,如圖所示 二、在
    發表于 01-26 08:58

    汽車網絡安全開發語言選型指南:C/C++/Rust/Java等主流語言對比+Perforce QAC/Klocwork工具支持

    汽車網絡安全如何選編程語言CC++、Rust、Java……誰更適合AUTOSAR、ISO/SAE 21434?一文了解8種主流語言的優劣與適用場景,以及Perforce QAC/K
    的頭像 發表于 12-26 11:13 ?423次閱讀
    汽車網絡安全開發<b class='flag-5'>語言</b>選型指南:<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>/Rust/Java等主流<b class='flag-5'>語言</b>對比+Perforce QAC/Klocwork工具支持

    C語言C++的區別及聯系

    C語言C++到底是什么關系? 首先C++C語言本來就是兩種不同的編程
    發表于 12-24 07:23

    CC++之間的聯系

    1、語法兼容性: C++完全兼容C語言的語法,這意味著任何有效的C語言程序都可以直接在C++
    發表于 12-11 06:51

    C語言C++之間的區別是什么

    區別 1、面向對象編程 (OOP): C語言是一種面向過程的語言,它強調的是通過函數將任務分解為一系列步驟進行執行。 C++C
    發表于 12-11 06:23

    C/C++條件編譯

    條件編譯是一種在編譯時根據條件選擇性地包含或排除部分代碼的處理方法。在 C/C++ 中,條件編譯使用預處理指令 #ifdef、#endif、#else 和 #elif 來實現。常用的條件編譯指令有
    發表于 12-05 06:21

    C語言特性

    存儲和處理方式,提高系統的運行效率。 4、豐富的開發工具與社區支持 在嵌入式開發領域,大部分的開發工具都對 C/C++ 語言提供了良好的支持。從經典的 Keil、IAR,到開源的 GCC
    發表于 11-24 07:01

    C/C++代碼靜態測試工具Perforce QAC 2025.3的新特性

    ?Perforce Validate?中?QAC?項目的相對/根路徑的支持。C++?分析也得到了增強,增加了用于檢測 C++?并發問題的新檢查,并改進了實體名稱和實
    的頭像 發表于 10-13 18:11 ?568次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代碼靜態測試工具Perforce QAC 2025.3的新特性

    技能+1!如何在樹莓派上使用C++控制GPIO?

    在使用樹莓派時,你會發現Python和Scratch是許多任務(包括GPIO編程)中最常用的編程語言。但你知道嗎,你也可以使用C++進行GPIO編程,而且這樣做還有不少好處。借助WiringPi
    的頭像 發表于 08-06 15:33 ?4150次閱讀
    技能+1!如何在樹莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    C++ 與 Python:樹莓派上哪種語言更優?

    Python是樹莓派上的首選編程語言,我們的大部分教程都使用它。然而,C++在物聯網項目中同樣廣受歡迎且功能強大。那么,在樹莓派項目中選擇哪種語言更合適呢?Python因其簡潔性、豐富的庫和資源而被
    的頭像 發表于 07-24 15:32 ?942次閱讀
    <b class='flag-5'>C++</b> 與 Python:樹莓派上哪種<b class='flag-5'>語言</b>更優?

    基于LockAI視覺識別模塊:C++目標檢測

    本文檔基于瑞芯微RV1106的LockAI凌智視覺識別模塊,通過C++語言做的目標檢測實驗。本文檔展示了如何使用lockzhiner_vision_module::PaddleDet類進行目標檢測,并通過lockzhiner_vision_module::Visualiz
    的頭像 發表于 06-06 13:56 ?835次閱讀
    基于LockAI視覺識別模塊:<b class='flag-5'>C++</b>目標檢測

    主流的 MCU 開發語言為什么是 C 而不是 C++

    在單片機的地界兒里,C語言穩坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉。先說內存這道坎兒。您當stm32f4的
    的頭像 發表于 05-21 10:33 ?1037次閱讀
    主流的 MCU 開發<b class='flag-5'>語言</b>為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    深入理解C語言C語言循環控制

    C語言編程中,循環結構是至關重要的,它可以讓程序重復執行特定的代碼塊,從而提高編程效率。然而,為了避免程序進入無限循環,C語言提供了多種循環控制語句,如break、continue和
    的頭像 發表于 04-29 18:49 ?2034次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環控制

    C語言的歷史及程序介紹

    電子發燒友網站提供《C語言的歷史及程序介紹.pdf》資料免費下載
    發表于 04-09 16:10 ?0次下載

    C++學到什么程度可以找工作?

    C++學到什么程度可以找工作?要使用C++找到工作,特別是作為軟件開發人員或相關職位,通常需要掌握以下幾個方面: 1. **語言基礎**:你需要對C++的核心概念有扎實的理解,包括但不
    發表于 03-13 10:19