乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

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


       以前基本沒接觸過extern "C"或者extern "C++  "這樣的用法。可能企業(yè)中會(huì)用到,就來小記下,以后不會(huì)了在回頭來看下。實(shí)在不行就百度啦! 

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

      具體舉例來講:
       C++中調(diào)用C函數(shù)----->>>
       /***C頭文件test.h****/
       #ifndef TEST_H
       #define TEST_H
       extern "C" int QQ(int e);
       #endif
       /***C 實(shí)現(xiàn)文件 test.c**/
       #include "test.h"
       int QQ(int e)
       {
          return e*e;
       }
       //C++文件實(shí)現(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++實(shí)現(xiàn)**** cppSquare.cpp/
       #include "cppSquare.h"
       int QQ(int e)
       {
          return e*e;
       }
       //C文件調(diào)用實(shí)現(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)致連接方式不同。所以才會(huì)導(dǎo)致調(diào)用方式不同呢?

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多