最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c/c++單例模式類的混合編譯案例詳解

 更新時(shí)間:2022年10月09日 15:04:05   作者:Fat_Markov  
? 由于c語言中沒有類的概念,因此對(duì)于有類的cpp文件與c文件混合編譯時(shí),提供一個(gè)中間層提供類的操作接口,在c文件中調(diào)用接口實(shí)現(xiàn)間接操作類對(duì)象,這篇文章主要介紹了c/c++單例模式類的混合編譯的相關(guān)資料

C/C++混合編譯

難點(diǎn):c++支持重載,因此g++編譯后的函數(shù)名有額外信息,在gcc編譯的c文件中無法識(shí)別符號(hào),導(dǎo)致鏈接失敗。

解決方案:

  • extern “C” { }
  • 中間層調(diào)用 extern “C”

? 對(duì)c++文件編譯時(shí)使用extern “C“ { },讓編譯器安裝c語言的規(guī)則對(duì)其中的內(nèi)容進(jìn)行編譯,主要解決c++中重載函數(shù)名導(dǎo)致符號(hào)不識(shí)別的問題。

? 同時(shí)配合ifdef __cplusplusendif實(shí)現(xiàn)文件(主要是頭文件)被gcc和g++編譯時(shí)能夠自動(dòng)匹配當(dāng)前編譯器的語言。另一方面也是因?yàn)閏語言不支持extern “C”關(guān)鍵字。

中間層調(diào)用

? 由于c語言中沒有類的概念,因此對(duì)于有類的cpp文件與c文件混合編譯時(shí),提供一個(gè)中間層提供類的操作接口,在c文件中調(diào)用接口實(shí)現(xiàn)間接操作類對(duì)象。

log案例

背景:main.c中需要調(diào)用logClass.cpp文件中的logClass類的相關(guān)成員函數(shù),并且該類是一個(gè)單例模式。

解決方案:

文件目錄

│main.c

├─include
│ interFace.h
│ logClass.h

└─src
interFace.cpp
logClass.cpp

源代碼

main.c

#include "interFace.h"
#include <stdint.h>
#include <stdio.h>

int main()
{
    set_log_count(10);
    uint32_t count = get_log_count();
    printf("The conut is %d\n", count);
}

logClass.h

#ifndef LOG_CLASS_H
#define LOG_CLASS_H
#include <stdint.h>
#include <stdio.h>

#define FCA_BOOL uint16_t
#define FCA_TRUE 1
#define FCA_FALSE 0
class logClass
{
public:
    static logClass *getInstance()
    {
        static logClass m_plogClass;
        return &m_plogClass;
    }

    FCA_BOOL setLogCount(uint32_t num);
    uint32_t getLogCount();

private:
    logClass();
    logClass(const logClass &) = delete;
    logClass &operator=(const logClass &) = delete;
    ~logClass();
    uint32_t m_logCount;
    static logClass* m_plogClass;
};
#endif

logClass.cpp

#include "logClass.h"

logClass::logClass(/* args */)
{
    printf("log class construct!!!!!\n");
}

logClass::~logClass()
{
    printf("log class destruct!!\n");
}

FCA_BOOL logClass::setLogCount(uint32_t num)
{
    m_logCount = num;
    return FCA_TRUE;
}

uint32_t logClass::getLogCount()
{
    return m_logCount;
}

interFace.cpp

#include "interFace.h"
#include "logClass.h"

logClass* log = logClass::getInstance();

FCA_BOOL set_log_count(uint32_t num)
{
    FCA_BOOL ret = log->setLogCount(num);
    return ret;
}

uint32_t get_log_count()
{
    return log->getLogCount();
}

interFace.h

#ifndef INTERFACE_H
#define INTERFACE_H
#include <stdint.h>

#define FCA_BOOL uint16_t
#define FCA_TRUE 1
#define FCA_FALSE 0

#ifdef __cplusplus
extern "C"
{
#endif
FCA_BOOL set_log_count(uint32_t num);
uint32_t get_log_count();
#ifdef __cplusplus
}
#endif
#endif

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)
project(MYLOGTEST CXX C)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")  #設(shè)置c++的編譯選項(xiàng)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")  #設(shè)置c的編譯選項(xiàng)
include_directories(include)
add_executable(mylogtest main.c src/logClass.cpp src/interFace.cpp)

到此這篇關(guān)于c/c++單例模式類的混合編譯的文章就介紹到這了,更多相關(guān)c++混合編譯內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言變量和全局變量能否重名問題

    C語言變量和全局變量能否重名問題

    這篇文章主要介紹了C語言變量和全局變量能否重名問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • C語言system函數(shù)使用方法詳解

    C語言system函數(shù)使用方法詳解

    本文詳細(xì)講解了C語言system函數(shù)的使用方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • OpenCV 圓與矩形識(shí)別的方法

    OpenCV 圓與矩形識(shí)別的方法

    這篇文章主要介紹了OpenCV 圓與矩形識(shí)別的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • C語言 將字符串逆序輸出的實(shí)例

    C語言 將字符串逆序輸出的實(shí)例

    這篇文章主要介紹了C語言將字符串逆序輸出的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • C語言編寫Linux守護(hù)進(jìn)程實(shí)例

    C語言編寫Linux守護(hù)進(jìn)程實(shí)例

    這篇文章主要介紹了C語言編寫Linux守護(hù)進(jìn)程實(shí)例,本文講解了守護(hù)進(jìn)程及其特性、守護(hù)進(jìn)程的編程要點(diǎn)、守護(hù)進(jìn)程代碼實(shí)例等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • C++回溯算法之深度優(yōu)先搜索詳細(xì)介紹

    C++回溯算法之深度優(yōu)先搜索詳細(xì)介紹

    回溯在迷宮搜索中使用很常見,就是這條路走不通,然后返回前一個(gè)路口,繼續(xù)下一條路?;厮菟惴ㄕf白了就是窮舉法,下面讓我們一起來看看回溯算法中深度優(yōu)先搜索吧
    2023-01-01
  • 深入理解Qt 智能指針

    深入理解Qt 智能指針

    智能指針是一種特殊的指針,可以自行管理和釋放資源,防止內(nèi)存泄漏和懸掛指針,本文主要介紹了深入理解Qt 智能指針,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • C++實(shí)現(xiàn)圖書管理系統(tǒng)源碼

    C++實(shí)現(xiàn)圖書管理系統(tǒng)源碼

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)圖書管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言演示對(duì)歸并排序算法的優(yōu)化實(shí)現(xiàn)

    C語言演示對(duì)歸并排序算法的優(yōu)化實(shí)現(xiàn)

    這篇文章主要介紹了C語言演示對(duì)歸并排序算法的優(yōu)化實(shí)現(xiàn),歸并排序的最差時(shí)間復(fù)雜度為(n\log n),最優(yōu)時(shí)間復(fù)雜為(n),存在可以改進(jìn)的空間,需要的朋友可以參考下
    2016-05-05
  • 斐波那契數(shù)列 優(yōu)化矩陣求法實(shí)例

    斐波那契數(shù)列 優(yōu)化矩陣求法實(shí)例

    斐波那契數(shù)列 優(yōu)化矩陣求法實(shí)例,需要的朋友可以參考一下
    2013-03-03

最新評(píng)論

上林县| 苏尼特左旗| 济阳县| 兰西县| 梅州市| 弥渡县| 临高县| 绵阳市| 错那县| 威信县| 洱源县| 武义县| 巴里| 旬邑县| 荔波县| 蒙城县| 扬中市| 张家口市| 阿拉尔市| 临夏县| 岗巴县| 蒙阴县| 平原县| 久治县| 石林| 广宗县| 文昌市| 富裕县| 繁峙县| 阳西县| 青龙| 三穗县| 黑山县| 花垣县| 通渭县| 宁城县| 遂宁市| 土默特左旗| 铁力市| 新竹县| 全南县|