国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

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

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

開(kāi)通VIP
extern "C" - C基礎(chǔ) - 石頭
extern "C"包含雙重含義,其一:被它修飾的目標(biāo)是“extern”的;其二:被它修飾的目標(biāo)是“C”的。
1)被extern “C”限定的函數(shù)或變量是extern類型的;
    extern是C/C++語(yǔ)言中表明函數(shù)和全局變量作用范圍(可見(jiàn)性)的關(guān)鍵字,該關(guān)鍵字告訴編譯器,其聲明的函數(shù)和變量可以在本模塊或其他模塊中使用。
    注意:extern int a;
    僅僅是在聲明一個(gè)變量,并不是定義變量a,并未為a分配內(nèi)存空間。變量a在所有模塊中作為一種全局變量只能被定義一次,否則會(huì)出現(xiàn)連接錯(cuò)誤。
    通常,在模塊的頭文件中對(duì)模塊提供給其他模塊引用的函數(shù)和全局變量以關(guān)鍵字extern聲明。例如,如果模塊B欲引用該模塊A中定義的全局變量和函數(shù)時(shí)只需包含模塊A的頭文件即可。這樣,模塊B中調(diào)用模塊A中的函數(shù)時(shí),在編譯階段,模塊B雖然找不到該函數(shù),但是并不會(huì)報(bào)錯(cuò),它會(huì)在連接階段中從模塊A編譯生成的目標(biāo)代碼中找到此函數(shù)。
    與extern對(duì)應(yīng)的關(guān)鍵字是static,被它修飾的全局變量和函數(shù)只能在本模塊中使用。因此,一個(gè)函數(shù)或變量只可能被本模塊使用時(shí),其不可能被extern "C"修飾。
2)被extern "C"修飾的變量和函數(shù)是按照C語(yǔ)言方式編譯和連接的
    作為一種面向?qū)ο蟮恼Z(yǔ)言,C++支持函數(shù)重載,而過(guò)程式語(yǔ)言C則不支持。函數(shù)被C++編譯后在符號(hào)庫(kù)中的名字與C語(yǔ)言的不同。例如,假設(shè)某個(gè)函數(shù)的原型為:void foo(int x, int y);
該函數(shù)被C編譯器編譯后在符號(hào)庫(kù)中的名字為_(kāi)foo,而C++編譯器則會(huì)產(chǎn)生像_foo_int_int之類的名字(不同的編譯器可能產(chǎn)生的名字不同,但是都采用了相同的機(jī)制)。_foo_int_int這樣的名字包含了函數(shù)名、函數(shù)參數(shù)數(shù)量及類型信息,C++就是靠這種機(jī)制來(lái)實(shí)現(xiàn)函數(shù)重載的。例如,在C++中,函數(shù)void foo(int x, int y)與void foo(int x, float y)編譯產(chǎn)生的符號(hào)是不相同的,后者為_(kāi)foo_int_float。
    extern "C"作用:實(shí)現(xiàn)C++與C及其它語(yǔ)言的混合編程。
3)extern "C"的慣用法
A)在C++中引用C語(yǔ)言中的函數(shù)和變量,在包含C語(yǔ)言頭文件(假設(shè)為cExample.h)時(shí),需進(jìn)行下列處理:
extern "C"
{
#include "cExample.h"
}
    而在C語(yǔ)言的頭文件中,對(duì)其外部函數(shù)只能指定為extern類型,C語(yǔ)言中不支持extern "C"聲明,在.c文件中包含了extern "C"時(shí)會(huì)出現(xiàn)編譯語(yǔ)法錯(cuò)誤。
    例如:
/*c語(yǔ)言頭文件:cExample.h*/
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
extern int add(int x, int y);
#endif
/*c語(yǔ)言實(shí)現(xiàn)文件:cExample.c*/
#include "cExample.h"
int add(int x, int y)
{
    return x+y;
}
//c++實(shí)現(xiàn)文件,調(diào)用add:cppFile.cpp
extern "C"
{
#include "cExample.h"
}
int main(int argc, char *argv[])
{
    add(2,3);
    return 0;
}
B)在C中引用C++語(yǔ)言中的函數(shù)和變量時(shí),C++的頭文件需添加extern "C",但是在C語(yǔ)言中不能直接引用聲明了extern "C"的頭文件,應(yīng)該僅將C文件中將C++中定義的extern "C"函數(shù)聲明為extern類型。
例如:
//C++頭文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern "C" int add(int x, int y);
#endif
//C++實(shí)現(xiàn)文件 cppExample.cpp
#include "cppExample.h"
int add(int x, int y)
{
    return x+y;
}
/*C實(shí)現(xiàn)文件cFile.c
/*這樣會(huì)編譯出錯(cuò):#include "cExample.h"*/
extern int add(int x, int y);
int main(int argc, char *argv[])
{
    add(2,3);
    return 0;
}
 
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++中extern “C”含義深層探索
extern "C" 解析
結(jié)合extern談?wù)勵(lì)^文件的作用
extern “C”的作用詳解
C/C++:函數(shù)的編譯方式與調(diào)用約定以及extern “C”的使用
extern
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服