伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

C語(yǔ)言與C++相互調(diào)用

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

掃碼添加小助手

加入工程師交流群

1C與C++相互調(diào)用

在一個(gè)嵌入式系統(tǒng)中大部分的底層和驅(qū)動(dòng)層更多的是采用C語(yǔ)言來(lái)進(jìn)行開發(fā),而上層應(yīng)用、服務(wù)更多的采用C++等高級(jí)語(yǔ)言來(lái)進(jìn)行面向?qū)ο蟮确矫娴拈_發(fā)方式,那么就存在一個(gè)上層調(diào)用底層接口的問(wèn)題,比如最常用的C++調(diào)用C的接口來(lái)完成相應(yīng)的外設(shè)驅(qū)動(dòng)接口。

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

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

所以理論上來(lái)說(shuō)用C編譯器編譯好的模塊能夠直接通過(guò)C++來(lái)進(jìn)行調(diào)用才對(duì)。

2extern關(guān)鍵字

由于C++編譯器默認(rèn)都是按照C++的編譯方式來(lái)對(duì)源文件進(jìn)行編譯,這樣C語(yǔ)言文件也會(huì)直接采用C++編譯。

對(duì)于底層的驅(qū)動(dòng)等都會(huì)以使用C語(yǔ)言編寫的DLL等給出來(lái),然后從中導(dǎo)出函數(shù)給C或C++的模塊來(lái)進(jìn)行訪問(wèn),所以還是需要C++語(yǔ)法中能夠標(biāo)識(shí)出來(lái)給編譯器,哪些需要采用C++方式編譯,哪些需要采用C方式編譯。

那么這個(gè)編譯區(qū)分就由extern “C”來(lái)完成,下面我們就以一個(gè)例子看看如何使用的。

//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文件將會(huì)以C編譯方式進(jìn)行,由于C++支持函數(shù)重載而C語(yǔ)言不支持函數(shù)重載,所以以上源碼可以直接編譯可以通過(guò),而一旦把extern“C”注釋去掉,便會(huì)編譯失敗。

3互調(diào)操作

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

上面小哥畫了一張互調(diào)的簡(jiǎn)圖,并分別解釋一下:

1)C++編譯器通過(guò)extern “C”即可直接調(diào)用以C方式編譯的庫(kù)文件,最終與其他文件一起編譯成為一個(gè)可執(zhí)行文件。

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

4小技巧

在C++編譯器內(nèi)部一般都會(huì)內(nèi)置__cplusplus這樣一個(gè)宏定義,那么我們可以通過(guò)使用該宏來(lái)設(shè)置一個(gè)預(yù)編譯結(jié)構(gòu),當(dāng)在C++編譯器下就使用extern “C”編譯C模塊代碼,否則就剔除,相信大家在一些庫(kù)文件中經(jīng)常看到。

#ifdef__cplusplus
extern"C"
{
#endif

//fuctiondefinitionordeclaration

#ifdef__cplusplus
}
#endif

責(zé)任編輯:xj

原文標(biāo)題:C代碼與C++互相調(diào)用的小技巧

文章出處:【微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    183

    文章

    7645

    瀏覽量

    145913
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2124

    瀏覽量

    77263
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4973

    瀏覽量

    74184

原文標(biāo)題:C代碼與C++互相調(diào)用的小技巧

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    keil實(shí)現(xiàn)cc++混合編程

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

    汽車網(wǎng)絡(luò)安全開發(fā)語(yǔ)言選型指南:C/C++/Rust/Java等主流語(yǔ)言對(duì)比+Perforce QAC/Klocwork工具支持

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

    C語(yǔ)言C++的區(qū)別及聯(lián)系

    C語(yǔ)言C++到底是什么關(guān)系? 首先C++C語(yǔ)言本來(lái)就是兩種不同的編程
    發(fā)表于 12-24 07:23

    CC++之間的聯(lián)系

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

    C語(yǔ)言C++之間的區(qū)別是什么

    區(qū)別 1、面向?qū)ο缶幊?(OOP): C語(yǔ)言是一種面向過(guò)程的語(yǔ)言,它強(qiáng)調(diào)的是通過(guò)函數(shù)將任務(wù)分解為一系列步驟進(jìn)行執(zhí)行。 C++C
    發(fā)表于 12-11 06:23

    C/C++條件編譯

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

    C語(yǔ)言特性

    存儲(chǔ)和處理方式,提高系統(tǒng)的運(yùn)行效率。 4、豐富的開發(fā)工具與社區(qū)支持 在嵌入式開發(fā)領(lǐng)域,大部分的開發(fā)工具都對(duì) C/C++ 語(yǔ)言提供了良好的支持。從經(jīng)典的 Keil、IAR,到開源的 GCC
    發(fā)表于 11-24 07:01

    C語(yǔ)言和單片機(jī)C語(yǔ)言有什么差異

    單片機(jī)c語(yǔ)言相對(duì)于普通C語(yǔ)言增加了一些基本的指令,還有變量的賦值是16進(jìn)制,當(dāng)然單片機(jī)c語(yǔ)言只牽
    發(fā)表于 11-14 07:55

    C/C++代碼靜態(tài)測(cè)試工具Perforce QAC 2025.3的新特性

    ?Perforce Validate?中?QAC?項(xiàng)目的相對(duì)/根路徑的支持。C++?分析也得到了增強(qiáng),增加了用于檢測(cè) C++?并發(fā)問(wèn)題的新檢查,并改進(jìn)了實(shí)體名稱和實(shí)
    的頭像 發(fā)表于 10-13 18:11 ?622次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代碼靜態(tài)測(cè)試工具Perforce QAC 2025.3的新特性

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

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

    C++ 與 Python:樹莓派上哪種語(yǔ)言更優(yōu)?

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

    基于LockAI視覺(jué)識(shí)別模塊:C++目標(biāo)檢測(cè)

    本文檔基于瑞芯微RV1106的LockAI凌智視覺(jué)識(shí)別模塊,通過(guò)C++語(yǔ)言做的目標(biāo)檢測(cè)實(shí)驗(yàn)。本文檔展示了如何使用lockzhiner_vision_module::PaddleDet類進(jìn)行目標(biāo)檢測(cè),并通過(guò)lockzhiner_vision_module::Visualiz
    的頭像 發(fā)表于 06-06 13:56 ?912次閱讀
    基于LockAI視覺(jué)識(shí)別模塊:<b class='flag-5'>C++</b>目標(biāo)檢測(cè)

    主流的 MCU 開發(fā)語(yǔ)言為什么是 C 而不是 C++

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

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    C語(yǔ)言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無(wú)限循環(huán),C語(yǔ)言提供了多種循環(huán)控制語(yǔ)句,如break、continue和
    的頭像 發(fā)表于 04-29 18:49 ?2112次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制

    C語(yǔ)言的歷史及程序介紹

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言的歷史及程序介紹.pdf》資料免費(fèi)下載
    發(fā)表于 04-09 16:10 ?0次下載