欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
用c語(yǔ)言寫(xiě)動(dòng)態(tài)庫
http://no001.blog.51cto.com/1142339/346036
2010
1. 用c語(yǔ)言寫(xiě)動(dòng)態(tài)庫:
/*
 * libsthc.h
 * Declarations for function add  //為增加函數聲明
 */
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
//宏--如果定義c++;這里用來(lái)為c++加載c函數 ,以下是詳細解釋?zhuān)?/div>
時(shí)常在cpp的代碼之中看到這樣的代碼:
#ifdef __cplusplus
extern "C" {
#endif
//一段代碼
#ifdef __cplusplus
}
#endif
  
    這樣的代碼到底是什么意思呢?首先,__cplusplus是cpp中的自定義宏,那么定義了這個(gè)宏的話(huà)表示這是一段cpp的代碼,也就是說(shuō),上面的代碼的含義是:如果這是一段cpp的代碼,那么加入extern "C"{和}處理其中的代碼。
  要明白為何使用extern "C",還得從cpp中對函數的重載處理開(kāi)始說(shuō)起。在c++中,為了支持重載機制,在編譯生成的匯編碼中,要對函數的名字進(jìn)行一些處理,加入比如函數的返回類(lèi)型等等.而在C中,只是簡(jiǎn)單的函數名字而已,不會(huì )加入其他的信息.也就是說(shuō):C++和C對產(chǎn)生的函數名字的處理是不一樣的. 目的就是主要實(shí)現C與C++的相互調用問(wèn)題。
 
 
c.h的實(shí)現
#ifndef _c_h_
#define _c_h_
#ifdef __cplusplus
extern "C" {
#endif
void C_fun();
#ifdef __cplusplus
}
#endif

#endif
-----------------------------------
c.c的實(shí)現
#include "c.h"
void C_fun()
{
}
------------------------------------
在cpp.cpp中調用c.c中的C_test()
cpp.cpp的實(shí)現
#include "c.h"
int main()
{
     C_fun()
}
其中__cplusplus是C++編譯器的保留宏定義.就是說(shuō)C++編譯器認為這個(gè)宏已經(jīng)定義了.
所以關(guān)鍵是extern "C" {}
extern "C"是告訴C++編譯器件括號里的東東是按照C的obj文件格式編譯的,要連接的話(huà)按照C的命名規則去找.
==========================
那么C中是如何調用C++中的函數cpp_fun()呢?
因為先有C后有C++, 所以只能從C++的代碼中考慮了.
加入C++中的函數或變量有可能被C中的文件掉用,則應該這樣寫(xiě),也是用extern "C"{}
不過(guò)是代碼中要加,頭文件也要加,因為可能是C++中也調用
--------------------------------------
cpp.h的實(shí)現
#ifndef _c_h_
#define _c_h_
#ifdef __cplusplus
extern "C" {
#endif
void CPP_fun();
#ifdef __cplusplus
}
#endif

#endif
.-------------------------------------------
Cpp.cpp的實(shí)現
extern "C" {    //告訴C+++編譯器,擴號里按照C的命名規則編譯
void CPP_fun()
{
     .....
}
 
 
總結
  C和C++對函數的處理方式是不同的.extern "C"是使C++能夠調用C寫(xiě)作的庫文件的一個(gè)手段,如果要對編譯器提示使用C的方式來(lái)處理函數的話(huà),那么就要使用extern "C"來(lái)說(shuō)明。
#ifdef __cplusplus
extern "C"
{
#endif
int add(int x, int y);
#ifdef __cplusplus
}
#endif
/*
 * libsthc.c
 * Implementation of function add declared in libsthc.h//實(shí)現已經(jīng)聲明的函數
 * in c language
 */
#include "libsthc.h"
int add(int x, int y)
{
         return x + y;
}
#makefile
libsthc.so:libsthc.o
         gcc -shared libsthc.o -lc -o libsthc.so
libsthc.o:libsthc.c libsthc.h
         gcc -fPIC -c libsthc.c -o libsthc.o
all:libsthc.so
clean:
         rm -f *.o *.so
make完成后,會(huì )生成一個(gè)動(dòng)態(tài)庫,即libsthc.so。為了使其他程序也可以使用該動(dòng)態(tài)庫,需要將庫文件libsthc.so拷貝到/usr/lib目錄下(由于權限的問(wèn)題,一般要以root的身分進(jìn)行拷貝),為了使其他程序也可以使用該動(dòng)態(tài)庫,需要將頭文件libsthc.h拷貝到/usr/include目錄下(由于權限的問(wèn)題,一般要以root的身分進(jìn)行拷貝)。

本文出自 “人生得意須盡歡” 博客,請務(wù)必保留此出處http://no001.blog.51cto.com/1142339/346036

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久