首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

extern用法总结!

extern 在源文件A里定义的函数,在其他源文件中是看不见的(即不能訪问)。...#i nclude “stdafx.h” 1.extern用在变量声明中经常有这样一个作用,你在*.c文件里声明了一个全局的变量,这个全局的变量假设要被引用,就放在*.h中并用extern来声明。...一般来说,声明定义在本文件的函数不用“extern”,声明定义在其它文件里的函数用“extern”,这样在本文件里调用别的文件定义的函数就不用包括头文件 include “*.h”来声明函数,声明后直接使用就可以...================================   举个样例: //extern.cpp内容例如以下: // extern.cpp : Defines the entry point...假设把“extern”去掉,程序依旧能够正常执行。   由此可见,“extern”在函数声明中可有可无,仅仅是用来标志该函数在本文件里定义,还是在别的文件里定义。

50520

extern关键字详解

extern的注意事项 (1)extern数组变量 在一个源文件里定义了一个数组:char a[6],在另外一个文件里用下列语句进行了声明:extern char *a是不可以的,便宜可以通过,但运行时出现错误...(2)extern全局变量 如果在一个test1.h头文件中将全局变量的声明和定义放在一起, extern char g_str[] = "123456"; // 这个时候相当于没有extern 在两个...extern和static static的全局变量作用域只在本文件中,所以extern和static不能同时修饰一个变量; extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量. static...extern 和const C++中const修饰的全局常量据有跟static相同的特性,即它们只能作用于本编译模块中,但是const可以与extern连用来声明该常量可以作用于其他编译模块中, 如extern...,它的特性就跟extern的一样了!

1.7K10

extern c(1)

extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。...这个功能十分有用处,因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码和已经写好的C语言库,需要在C++中尽可能的支持C,而extern "C"就是其中的一个策略...的头文件中使用 3.在多个人协同开发时,可能有的人比较擅长C语言,而有的人擅长C++,这样的情况下也会有用到 通常,在C语言的头文件中经常可以看到类似下面这种形式的代码: #ifdef __cplusplus extern...endif /**** some declaration or so *****/ #ifdef __cplusplus } #endif /* end of __cplusplus */ 其中的extern

48830

extern C的作用

这是一个典型的静态注册JNI的例子,调用stringFromJNI的java方法会调用到Java_com_kobe_MainActivity_stringFromJNI这个方法,细心的朋友会发现有一行extern...this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); } 删除extern...extern "C"的作用到底是什么呢?...4.动态注册的JNI接口,就不用担心这个问题,所以不用加extern "C" 进一步思考 很多时候我们会碰到一些头文件中声明了C语言的函数,但是这个头文件会被C语言或者C++语言使用。...但是在C++语言中就会将memset函数修饰成_Z6memsetPvii, 这样子链接器就无法与C库中的memset的链接了,所以必须使用extern "C",但是C语言又不支持extern "C",如果为了兼容

66030

extern、定义和声明

而全局变量在外部使用声明时,extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此标记存储空间在执行时加载如内存并初始化为...也就是说,不管是int a;还是extern int a=0;还是int a=0;都只能出现一次,而那个extern int a可以出现很多次。...总结下: 对变量而言,变量的声明有两种情况: 一种是需要建立存储空间的,不用加extern;2、另一种是不需要建立存储空间,需要加extern 。...,声明函数加不加extern都没关系,所以在头文件中函数可以不用加extern。...在本节中我们只看到为C 语言提供的链接指示extern "C",extern "C"是惟一被保证由所有C++实现都支持的,每个编译器实现都可以为其环境下常用的语言提供其他链接指示例如extern "Ada

1K20

详细剖析 extern C

修改后的my_handle.h的代码如下: 小心门后的未知世界 在我们清楚了 extern "C" 的来历和用途之后,回到我们本来的话题上,为什么不能把#include 指令放置在 extern "C"..."C" { }里的时候,则会造成extern "C" { } 的嵌套。...你完全可以通过把#include指令放置在extern "C" { }的外面来避免嵌套。...所以,严格的讲,你只应该把这三种对象放置于extern "C"的内部。 但,你把C语言的其它元素,比如非函数类型定义(结构体,枚举等)放入extern "C"内部,也不会带来任何影响。...某些人可能会建议你,如果a.h没有extern "C",而b.cpp包含了a.h,可以在b.cpp里加上 : extern "C" {   #include "a.h" } 这是一个邪恶的方案,原因在之前我们已经阐述

1.2K30

extern关键字

extern是什么及其作用  extern是c++引入的一个关键字,它可以应用于一个全局变量,函数或模板声明,说明该符号具有外部链接(external linkage)属性。...于是就需要在文件间共享数据,这里extern就发挥了作用。先导知识符号的定义和声明  在介绍extern之前,我们需要了解一下变量的声明和定义。...extern的用法  extern有3种用法,分别如下:非常量全局变量的外部链接 最常见的用法,当链接器在一个全局变量声明前看到extern关键字,它会尝试在其他文件中寻找这个变量的定义。...i;extern "C" 和extern "C++"函数声明 在C++中,当与字符串连用时,extern指明当前声明使用了其他语言的链接规范,如extern "C",就指明使用C语言的链接规范。...extern的引用方式比包含头文件要更简洁。extern的使用方法是直接了当的,想引用哪个函数就用extern声明哪个函数。

2.1K30

必须使用extern的场景

困惑 即使不使用extern,在头文件中定义的全局变量,也可以被引用了该头文件的外部源文件使用。那extern存在的意义是什么?它要解决什么问题?...代码示例 test.h #ifndef __TEST1_H #define __TEST1_H int kVar = 1; // 测试不使用extern // extern int kVar; void...结论 一开始提到的困惑是 “即使不使用extern,在头文件中定义的全局变量,也可以被引用了该头文件的外部源文件使用”。对于全局变量仅被单个.cpp文件使用的情况,可以不使用extern。...而extern要解决的问题是,多个.cpp文件使用同一个全局变量时,使用extern可以使该全局变量在头文件中仅声明而不定义。再让唯一一个.cpp文件定义该变量,实现仅定义一次全局变量。

48760

深入理解extern使用方法

不能使用extern char* g_str;来声明。 extern是严格的声明。 且extern char* g_str仅仅是声明的一个全局字符指针。...二、extern “C” l extern “C” 包括双重含义。从字面上就可以得到:首先,被它修饰的目标是“extern”的;其次。被它修饰的目标是“C”的。...应该仅将C文件里将C++中定义的extern”C”函数声明为extern类型。 三、 extern 和static (1)extern表明该变量在别的地方已经定义过了。在这里要使用那个变量。...static作用范围是内部连接的关系这和extern有点相反。它和对象本身是分开存储的,extern也是分开存储的。...可是extern能够被其它的对象用extern引用,而static不能够,仅仅同意对象本身用它。

40510

【编程基础】extern C的用法解析

3.深层揭密extern "C"   extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。   ...被extern "C"限定的函数或变量是extern类型的;   extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用...明白了C++中extern "C"的设立动机,我们下面来具体分析extern "C"通常的使用技巧。..." }   而在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。   ...(2)在C中引用C++语言中的函数和变量时,C++的头文件需添加extern "C",但是在C语言中不能直接引用声明了extern "C"的该头文件,应该仅将C文件中将C++中定义的extern "C"

94530

extern C 关键字的作用

在 C 语言中, extern 关键字具有外延性,使修饰的变量作用域可以拓展到其他文件中。而在C++中,extren被重载后有了其他功能,就是修饰函数以什么方式进行编译。...a + b; } _declspec(dllexport) int sub(int a, int b) { return a - b; } 如果想让C++编译器不对函数进行倾轧,可以使用 extern...#include // 使用 C++ 编译器编译后的dll导出的所有函数都会倾轧 // 增加 extern “C” 关键字 extern “C” { _declspec(dllexport...可以增加一个判断,如果是C++文件就增加extern “C” 关键字,如果不是就不加,这样就可以非常灵活的使用 extren “C” 关键字了。...实现如下: #include // 使用 C++ 编译器编译后的dll导出的所有函数都会倾轧 // 增加 extern “C” 关键字 #ifdef __cplusplus extern

15220

C++ 中 extern 数组和指针

在一次使用 extern 声明全局变量的过程中,因为数组和指针的混用引发了错误。 我们知道,C++ 中使用 extern 来声明在其他(未使用 include 包含的)文件中的全局变量。...### extern 的问题 知道了上述的区别,再来看 `extern` 声明全局变量的内部实现: > 被 extern 修饰的全局变量不被分配空间,而是在链接的时候到别的文件中通过查找索引定位该全局变量的地址...补充 extern 知识 另外补充一些 extern 知识 extern "C":按照 C 语言的标准编译代码,主要是符号不同。...extern int i = 0;:定义,extern 可以省略,i 可以在其他文件中使用。 extern int i;:声明,i 在其他文件中定义。 int i:定义,分配了空间但未初始化。...extern const int i = 0:定义,i 是全局变量,可以在其他文件中使用。 为什么有 include 还需要 extern

15600
领券