欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# CLR 中學(xué)習(xí) C++關(guān)鍵詞extern使用詳解

 更新時(shí)間:2022年09月02日 10:59:22   作者:一線碼農(nóng)  
這篇文章主要為大家介紹了C# CLR 中學(xué)習(xí) C++ 之extern使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一:背景

在 CLR 源碼中有很多的 extern 和 extern "C" 這樣的關(guān)鍵詞,比如下面這些代碼:

extern size_t gc_global_mechanisms[MAX_GLOBAL_GC_MECHANISMS_COUNT];
extern DWORD g_dwHandles;
// The single GC heap instance, shared with the VM.
extern IGCHeapInternal* g_theGCHeap;
extern PTR_VOID GetUnwindDataBlob(TADDR moduleBase, PTR_RUNTIME_FUNCTION pRuntimeFunction, /* out */ SIZE_T * pSize);
extern "C" uint32_t* g_gc_card_table;
extern "C" uint8_t* g_gc_lowest_address;
extern "C"
{
    uint8_t *g_gc_sw_ww_table = nullptr;
    bool g_gc_sw_ww_enabled_for_gc_heap = false;
}

那這些都是什么意思呢? 為了更好的學(xué)習(xí) CLR,這些還是要簡(jiǎn)單了解一下的。

extern

1. 變量定義和變量引用

在 C# 中并沒有聽說(shuō)過(guò)有 extern 這種概念,其實(shí)變量可以有兩種方式存在。

  • 變量定義
  • 變量引用

變量定義概念很簡(jiǎn)單,定義就得給它分配內(nèi)存空間,比如下面這樣:

#include <iostream>
#include <Windows.h>
int k = 10;
const char* ch = "abcde";
int main()
{
	printf("ch=%d", strlen(ch));
}

接下來(lái)看下 變量引用,它其實(shí)和 文件引用 以及 C# 的 using 概念相似,即把其他文件中的變量引入到本文件,目的就是為了使用,比如在 Arts 文件下定義了一個(gè) page.cpp 文件,截圖如下:

為了能夠在 ConsoleApplication3.cpp 中使用 int i ,那怎么辦呢? 這時(shí)候就需要用 extern 引入了。

因?yàn)?VisualStudio 可以幫我們自動(dòng)鏈接,所以這里就不需要 #include "page.cpp" 導(dǎo)入,接下來(lái)把程序跑起來(lái),就可以觀察到程序的結(jié)果。

如果不用 extern 導(dǎo)入的話,就會(huì)出現(xiàn)編譯錯(cuò)誤,說(shuō) n 是未定義的。

還有一點(diǎn)要注意 extern 是對(duì)外部變量的一個(gè)引用,它不會(huì)生成任何匯編代碼。

2. extern "C"

要理解這個(gè)關(guān)鍵詞,首先要明白 方法符號(hào) 的概念,因?yàn)?C 和 C++ 在給方法生成符號(hào)的邏輯是不一樣的,比如同樣的一個(gè) fly 函數(shù)。

#include <stdio.h>
void fly() {
	printf("hello world");
}
int main()
{
}

在 C 中生成的函數(shù)名還是 fly 字樣。

可 C++ 不這么認(rèn)為,它會(huì)對(duì) fly 函數(shù)名重新編排,比如下面的 ?fly@@YAXXZ。

如果你在 C++ 中混用 C 的話,這時(shí)候就有理念沖突,那在C++中讓某些函數(shù)名還是原樣生成有辦法嗎?當(dāng)然可以了,這就需要使用 extern "C" ,參考如下代碼:

// page.cpp
#include <stdio.h>
extern "C"
{
	void fly() {
		printf("hello");
	}
}
void fly2() {
	printf("hello");
}

然后可以在 ConsoleApplication.cpp 中引入進(jìn)來(lái)。

// ConsoleApplication.cpp
#include <iostream>
extern "C" void fly();
extern void fly2();
int main()
{
	fly();
	fly2();
	return 0;
}

好了,本篇就簡(jiǎn)單說(shuō)這么多吧,相信再回頭看 CLR 中的那些 extern 關(guān)鍵詞,你會(huì)有一些新的理解。

以上就是C# CLR 中學(xué)習(xí) C++關(guān)鍵詞extern使用詳解的詳細(xì)內(nèi)容,更多關(guān)于C# CLR學(xué)習(xí)C++ extern的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++編寫實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    C++編寫實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了C++編寫實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語(yǔ)言設(shè)計(jì)簡(jiǎn)易電話簿

    C語(yǔ)言設(shè)計(jì)簡(jiǎn)易電話簿

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言設(shè)計(jì)簡(jiǎn)易電話簿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 通俗易懂的C語(yǔ)言快速排序和歸并排序的時(shí)間復(fù)雜度分析

    通俗易懂的C語(yǔ)言快速排序和歸并排序的時(shí)間復(fù)雜度分析

    這篇文章主要為大家通俗易懂的講解了C語(yǔ)言快速排序和歸并排序的時(shí)間復(fù)雜度分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • c++基礎(chǔ)使用STL的注意點(diǎn)詳解

    c++基礎(chǔ)使用STL的注意點(diǎn)詳解

    這篇文章主要為大家介紹了c++基礎(chǔ)使用STL的注意點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • C語(yǔ)言中常見的六種動(dòng)態(tài)內(nèi)存錯(cuò)誤總結(jié)

    C語(yǔ)言中常見的六種動(dòng)態(tài)內(nèi)存錯(cuò)誤總結(jié)

    學(xué)習(xí)過(guò)C語(yǔ)言中的動(dòng)態(tài)內(nèi)存函數(shù),例如【malloc】、【calloc】、【realloc】、【free】,那它們?cè)谑褂玫倪^(guò)程中會(huì)碰到哪些問(wèn)題呢,本本文我們一起來(lái)探討下,感興趣的朋友跟著小編一起來(lái)看看吧
    2023-11-11
  • C語(yǔ)言實(shí)現(xiàn)超市管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)超市管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)超市管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • wince禁止程序標(biāo)題欄上的退出按鈕示例

    wince禁止程序標(biāo)題欄上的退出按鈕示例

    這篇文章主要介紹了wince禁止程序標(biāo)題欄上的退出按鈕示例,需要的朋友可以參考下
    2014-02-02
  • Ubuntu 20.04 下安裝配置 VScode 的 C/C++ 開發(fā)環(huán)境(圖文教程)

    Ubuntu 20.04 下安裝配置 VScode 的 C/C++ 開發(fā)環(huán)境(圖文教程)

    這篇文章主要介紹了Ubuntu 20.04 下安裝配置 VScode 的 C/C++ 開發(fā)環(huán)境,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 簡(jiǎn)單談?wù)凜++ 中指針與引用

    簡(jiǎn)單談?wù)凜++ 中指針與引用

    下面用通俗易懂的話來(lái)概述一下,指針-對(duì)于一個(gè)類型T,T*就是指向T的指針類型,也即一個(gè)T*類型的變量能夠保存一個(gè)T對(duì)象的地址,而類型T是可以加一些限定詞的,引用-引用是一個(gè)對(duì)象的別名,主要用于函數(shù)參數(shù)和返回值類型,符號(hào)X&表示X類型的引用。
    2015-09-09
  • 使用Matlab制作簡(jiǎn)易版八分音符醬游戲

    使用Matlab制作簡(jiǎn)易版八分音符醬游戲

    八分音符醬作為一款聲音控制類游戲,當(dāng)時(shí)還是很受大家的喜愛的。本文將用Matlab制作一款簡(jiǎn)易版的八分音符醬游戲,感興趣的可以學(xué)習(xí)一下
    2022-02-02

最新評(píng)論