美文网首页
extern详解

extern详解

作者: 凉夜lrs | 来源:发表于2020-12-17 15:38 被阅读0次

1. 单独的extern

通常在模块的头文件中对本模块供给其他模块引用的函数和全局变量以关键字extern声明(注意是声明不是定义)。B模块引用A模块中声明的全局变量或函数时,它只要包含A模块的头文件即可,在编译阶段,模块B虽然找不到该函数或变量,但它不会报错,它会在链接时从模块A生成的目标代码中找到此函数。

把全局变量的声明和定义放在一起,相当于没有extern。

extern char g_str[] = "123456"; // 这个时候相当于没有extern

extern与static的区别:

  1. “水火不容”,extern和static不能同时修饰一个变量。
  2. static修饰的全局变量声明与定义同时进行,也就是说当你在头文件中使用static声明了全局变量后,它也同时被定义了。
  3. static修饰全局变量的作用域只能是本身的编译单元,也就是说它的“全局”只对本编译单元有效,其他编译单元则看不到它。

2. extern "C"

C++为了与C兼容,会将在extern "C"的大括号内部的代码当作C语言代码处理,:

extern "C"{
    int func(int);
    int var;
}

在上面的代码中,C++的名称修饰机制将不会起作用。如果单独声明某个函数或变量为C语言的符号,也可以用如下格式:

extern "C" int func(int);
extern "C" int var;

有些头文件声明了一些C语言的函数和全局变量,但这个文件可能被C语言代码或C++代码包含。为了兼容C与C++,可以使用C++的宏__cplusplus来解决:

#ifdef __cplusplus
extern "C"{
#endif

int func(int);
int var;

#ifdef __cplusplus
}
#endif

相关文章

  • AndFix实现原理详解[二]

    实现原理核心代码详解(davlik部分) 1、c++背景知识介绍 extern关键字 extern可置于变量或者函...

  • extern详解

    通常在模块的头文件中对本模块供给其他模块引用的函数和全局变量以关键字extern声明。C++为了与C兼容,会将在e...

  • extern详解

    目录 1同一个工程一个c文件函数调用另一个c文件函数 2 c文件调用另一个c文件变量 3 c++调用c函数 4 c...

  • [转]C++中的extern “C”用法详解

    原文 这篇文章主要介绍了C++中的extern “C”用法详解,简单来说,extern “C”是C++声明或定义C...

  • C/C++常见问题记录

    C/C++ 语法 extern “C”的作用详解[https://www.cnblogs.com/xiangtin...

  • const,static,extern详解

    一、�const详解 �如果试图修改由const修饰符修饰所声明的变量,编译器会报错。�const修饰符修饰的指针...

  • Android NDK 开发之JNI常规操作

    1. JNI函数详解 java中native方法在C++代码中一般如下: 1. extern "C" 说明 表示下...

  • const,static,extern 的详解

    最近写代码,看到很多地方都用到const,决定写一遍文章记录一下 首先看到const,我们就想到宏,先看看宏和co...

  • extern & const

    一、extern是什么 extern int a = 200;是定义 extern int a; 是声明;声明是没...

  • 问题记录:FOUNDATION_EXTERN、UIKIT_EXT

    问题记录:FOUNDATION_EXTERN、UIKIT_EXTERN和extern使用 Fig-01中定义fun...

网友评论

      本文标题:extern详解

      本文链接:https://www.haomeiwen.com/subject/vnszgktx.html