您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

2026-04-12 09:432阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1082个文字,预计阅读时间需要5分钟。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

目录一:背景

1.变量定义和引用

2.extern C 在 CLR 源码中的应用

一:背景

1.变量定义和引用

在 C++ 中,extern 关键字用于声明外部定义的变量或函数。这样可以在不同的文件中访问这些变量或函数,而不需要在每个文件中重新定义它们。

2. extern C 在 CLR 源码中的应用在 CLR(公共语言运行时)的源代码中,存在大量的 extern 和 extern C 关键字。这些关键字用于声明与 C 代码交互的接口,使得 C++ 和 C 代码能够相互调用。

例如:extern size_t gc_global_mechanisms[MAX_GLOBAL_GC_MECHANISM];

目录
  • 一:背景
  • extern
    • 1. 变量定义和变量引用
    • 2. extern "C"

一:背景

在 CLR 源码中有很多的externextern "C"这样的关键词,比如下面这些代码:

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这种概念,其实变量可以有两种方式存在。

  • 变量定义
  • 变量引用

变量定义概念很简单,定义就得给它分配内存空间,比如下面这样:

#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"导入,接下来把程序跑起来,就可以观察到程序的结果。

如果不用extern导入的话,就会出现编译错误,说n是未定义的。

还有一点要注意extern是对外部变量的一个引用,它不会生成任何汇编代码。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

2. extern "C"

要理解这个关键词,首先要明白方法符号的概念,因为 C 和 C++ 在给方法生成符号的逻辑是不一样的,比如同样的一个fly函数。

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

在 C 中生成的函数名还是fly字样。

可 C++ 不这么认为,它会对 fly 函数名重新编排,比如下面的?fly@@YAXXZ

如果你在 C++ 中混用 C 的话,这时候就有理念冲突,那在C++中让某些函数名还是原样生成有办法吗?当然可以了,这就需要使用 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 关键词,你会有一些新的理解。

以上就是C# CLR 中学习 C++关键词extern使用详解的详细内容,更多关于C# CLR学习C++ extern的资料请关注自由互联其它相关文章!

本文共计1082个文字,预计阅读时间需要5分钟。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

目录一:背景

1.变量定义和引用

2.extern C 在 CLR 源码中的应用

一:背景

1.变量定义和引用

在 C++ 中,extern 关键字用于声明外部定义的变量或函数。这样可以在不同的文件中访问这些变量或函数,而不需要在每个文件中重新定义它们。

2. extern C 在 CLR 源码中的应用在 CLR(公共语言运行时)的源代码中,存在大量的 extern 和 extern C 关键字。这些关键字用于声明与 C 代码交互的接口,使得 C++ 和 C 代码能够相互调用。

例如:extern size_t gc_global_mechanisms[MAX_GLOBAL_GC_MECHANISM];

目录
  • 一:背景
  • extern
    • 1. 变量定义和变量引用
    • 2. extern "C"

一:背景

在 CLR 源码中有很多的externextern "C"这样的关键词,比如下面这些代码:

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这种概念,其实变量可以有两种方式存在。

  • 变量定义
  • 变量引用

变量定义概念很简单,定义就得给它分配内存空间,比如下面这样:

#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"导入,接下来把程序跑起来,就可以观察到程序的结果。

如果不用extern导入的话,就会出现编译错误,说n是未定义的。

还有一点要注意extern是对外部变量的一个引用,它不会生成任何汇编代码。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

2. extern "C"

要理解这个关键词,首先要明白方法符号的概念,因为 C 和 C++ 在给方法生成符号的逻辑是不一样的,比如同样的一个fly函数。

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

在 C 中生成的函数名还是fly字样。

可 C++ 不这么认为,它会对 fly 函数名重新编排,比如下面的?fly@@YAXXZ

如果你在 C++ 中混用 C 的话,这时候就有理念冲突,那在C++中让某些函数名还是原样生成有办法吗?当然可以了,这就需要使用 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 关键词,你会有一些新的理解。

以上就是C# CLR 中学习 C++关键词extern使用详解的详细内容,更多关于C# CLR学习C++ extern的资料请关注自由互联其它相关文章!