2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

淺談extern "C++"/extern "C "

 WUCANADA 2012-04-24
淺談extern "C"/extern "C++ " (2011-05-27 15:47)
分類: C/C++筆記


 以前基本沒接觸過extern "C"或者extern "C++  "這樣的用法??赡芷髽I(yè)中會用到,就來小記下,以后不會了在回頭來看下。實在不行就百度啦! 

 從 字面意思來看,extern就是申明她修飾的函數(shù)或者全局變量(記住是全局變量哦)可以被本模塊或者其它模塊所調(diào)用。"C"/"C "就是連接規(guī)范的規(guī)定,表明采用的是C還是C 連接規(guī)范。比如模塊B想調(diào)用模塊A的全局變量,只需要在A中申明全局變量為extern 就可以了,那么雖然在編譯時找不到,但是B在連接時就可以找從A編譯好的模塊中找到了。但是從來沒用過。唉!
 與此對應(yīng)的是static,被她申明的只能在本模塊中使用。
 
 remember: extern int a;這樣申明的話表明了其實并沒有為a分配內(nèi)存空間,而且在所有的模塊中只能被定義為一次。還是沒用過。唉!
 先說下加了extern "C"和不加在C 中的連接方式的不同吧:
 //模塊A moduleA.h
 #ifndef MODULE_A_H
 #define MODULE_A_H
 void Print(ElemType e);
 #endif
 //模塊A的實現(xiàn) moduleB.cpp
 #include "moduleA.h"
 Print(ElemType e);
 當(dāng)模塊B調(diào)用模塊A的函數(shù)時,她會從A模塊生成的moduleA.obj中去尋找_moduleA_ElemType_或者類似這種類型的符號。
 再說加了extern "C":
 #ifndef MODULE_A_H
 #define MODULE_A_H
 extern "C" void Print(ElemType e);
 #endif
 那么當(dāng)B在同樣的調(diào)用時:
 1.A模塊生成的編譯目標(biāo)并沒有生成類似_moduleA_ElemType_這種符號;
 2.B尋找的是未經(jīng)過處理的_Print.
總體來說,當(dāng)面試官問你extern "C"的作用時,你就說她就是實現(xiàn)了C和C++的混合編成。我曾看過百度的幾道面試題,其中就有一個這個,還有一些設(shè)計模式的題目。沒事多看看啊。

具體舉例來講:
 C++中調(diào)用C函數(shù)----->>>
 /***C頭文件test.h****/
 #ifndef TEST_H
 #define TEST_H
 extern "C" int QQ(int e);
 #endif
 /***C 實現(xiàn)文件 test.c**/
 #include "test.h"
 int QQ(int e)
 {
    return e*e;
 }
 //C++文件實現(xiàn) cppTest.cpp
 #include<iostream.h>
 extern "C"
 {
   #include "test.h"
 }
 int main(int argc, char **argv)
 {
   int square = QQ(5);
   cout<<square<<endl;
   return 0;
 }
C中調(diào)用C++函數(shù)----->>>
 /***C++頭文件 cppSquare.h***/
 #ifndef CPP_SQUARE_H
 #define CPP_SQUARE_H
 extern "C" int QQ(int e);
 #endif
 /***C++實現(xiàn)**** cppSquare.cpp/
 #include "cppSquare.h"
 int QQ(int e)
 {
    return e*e;
 }
 //C文件調(diào)用實現(xiàn) cTest.cpp
 extern "C" int QQ(int e);//這里就不是調(diào)用頭文件了
 int main(int argc, char **argv)
 {
   int square = QQ(5);
   cout<<square<<endl;
   return 0;
 }
基本上就是這樣的了。以后希望再多多學(xué)習(xí)。即使不知道具體在工作后能用到不。但是我還在想為什么調(diào)用方式是這樣的區(qū)別了??是不是跟編譯方式不同,導(dǎo)致連接方式不同。所以才會導(dǎo)致調(diào)用方式不同呢?

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多