最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一:背景

在 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;
}

那這些都是什么意思呢? 為了更好的學習 CLR,這些還是要簡單了解一下的。

extern

1. 變量定義和變量引用

在 C# 中并沒有聽說過有 extern 這種概念,其實變量可以有兩種方式存在。

  • 變量定義
  • 變量引用

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

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

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

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

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

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

還有一點要注意 extern 是對外部變量的一個引用,它不會生成任何匯編代碼。

2. extern "C"

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

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

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

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

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

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

然后可以在 ConsoleApplication.cpp 中引入進來。

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

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

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

相關(guān)文章

  • C++?IO設(shè)備讀寫功能實現(xiàn)詳解

    C++?IO設(shè)備讀寫功能實現(xiàn)詳解

    C++的文件IO(Input,Output)操作就是指對文件進行讀寫(輸入與輸出)的操作。輸入就是從磁盤上的文件中讀取內(nèi)容到內(nèi)存中。輸出就是將內(nèi)存中的數(shù)據(jù)內(nèi)容輸出或者說寫入到磁盤的文件中,這篇文章主要介紹了C++?IO設(shè)備讀寫功能實現(xiàn)
    2022-11-11
  • C語言創(chuàng)建鏈表錯誤之通過指針參數(shù)申請動態(tài)內(nèi)存實例分析

    C語言創(chuàng)建鏈表錯誤之通過指針參數(shù)申請動態(tài)內(nèi)存實例分析

    這篇文章主要介紹了C語言創(chuàng)建鏈表錯誤之通過指針參數(shù)申請動態(tài)內(nèi)存,是鏈表創(chuàng)建過程中非常常見的經(jīng)典錯誤。實例中做了較為詳盡的分析,需要的朋友可以參考下
    2014-09-09
  • 從匯編看c++中extern關(guān)鍵字的使用

    從匯編看c++中extern關(guān)鍵字的使用

    本篇文章介紹了,在c++中extern關(guān)鍵字的使用概述,需要的朋友參考下
    2013-05-05
  • C++ STL標準庫std::vector的使用詳解

    C++ STL標準庫std::vector的使用詳解

    vector 是表示可以改變大小的數(shù)組的序列容器,本文主要介紹了C++ STL標準庫std::vector的使用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++實例輸入多行數(shù)字到數(shù)組

    C++實例輸入多行數(shù)字到數(shù)組

    這篇文章主要介紹了C++實例輸入多行數(shù)字到數(shù)組的相關(guān)資料,這里提供實例代碼幫助大家學習理解,需要的朋友可以參考下
    2016-12-12
  • 關(guān)于《C和指針》的學習筆記

    關(guān)于《C和指針》的學習筆記

    本篇文章是對《C和指針》這本書的學習做了筆記介紹。需要的朋友參考下
    2013-05-05
  • C語言設(shè)計三子棋小游戲

    C語言設(shè)計三子棋小游戲

    這篇文章主要為大家詳細介紹了C語言設(shè)計三子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 深入解析int(*p)[]和int(**p)[]

    深入解析int(*p)[]和int(**p)[]

    以下是對int(*p)[]和int(**p)[]的使用進行了詳細的分析介紹,需要的朋友可以參考下
    2013-07-07
  • C++ COM編程之QueryInterface函數(shù)(一)

    C++ COM編程之QueryInterface函數(shù)(一)

    這篇文章主要介紹了C++ COM編程之QueryInterface函數(shù)(一),QueryInterface是組件本身提供對自己查詢的一個接口,需要的朋友可以參考下
    2014-10-10
  • C++實現(xiàn)LeetCode(62.不同的路徑)

    C++實現(xiàn)LeetCode(62.不同的路徑)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(62.不同的路徑),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論

麻江县| 金平| 庆阳市| 达孜县| 望都县| 兰坪| 黄平县| 商南县| 贺兰县| 大丰市| 潼关县| 咸宁市| 广宁县| 宁城县| 龙口市| 民权县| 云龙县| 隆昌县| 松溪县| 神池县| 临泽县| 镇平县| 白银市| 乌鲁木齐市| 江永县| 沙湾县| 郑州市| 安龙县| 新龙县| 吉林省| 通海县| 泽库县| 五寨县| 海城市| 东乡县| 方正县| 额济纳旗| 湘乡市| 读书| 清河县| 阳西县|