`

extern static

 
阅读更多

作用1:   

  extern 可以置于变量或者函数前 标示变量或者函数的定义在别的文件中 ,提示编译器在遇到此变量和函数时在其他模块中寻找定义,注意它是声明 不是定义   

 

作用2:
  C++中 与 "C"连用

 extern "C"  void fun(int a , int b) ;则告诉编译器在编译fun这个函数名时 按着C的规则去编译

相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),为什么这么做呢,因为C++支持函数的重载啊,在这里不去过多的论述这个问题,如果你有兴趣可以去网上搜索,相信你可以得到满意的解释!

 

-----------------------------------------------------------------------------------------------------------------------------

1 问题:extern “C”

  在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?

  答案与分析:
  C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。
  下面是一个标准的写法:
//在.h文件的头上
#ifdef __cplusplus
#if __cplusplus
extern "C"{
 #endif
 #endif /* __cplusplus */ 
 …
 …
 //.h文件结束的地方
 #ifdef __cplusplus
 #if __cplusplus
}
#endif
#endif /* __cplusplus */ 

 

extern 和 static

 (1) extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量.
 (2) static 表示静态的变量,分配内存的时候, 存储在静态区,不存储在栈上面.

  static与extern是一对“水火不容”的家伙,也就是说extern和static不能同时修饰一个变

7. extern 和const

   C++中const修饰的全局常量据有跟static相同的特性,即它们只能作用于本编译模块中,但是const可以与extern连用来声明该常量可以作用于其他编译模块中, 如extern const char g_str[];
    然后在原文件中别忘了定义:     const char g_str[] = "123456"; 

 

 

 

 

 

 

 

 

 


 

 

 

 

  • 大小: 117.4 KB
分享到:
评论

相关推荐

    const extern static volatile 小结

    ### const extern static volatile 小结 #### 一、Const(常量) `const` 关键字在 C/C++ 语言中用于定义常量,即其值在程序运行期间不可更改的变量。`const` 可以与多种数据类型结合使用,例如 `const int x = 10...

    extern声明辨析

    ### C语言中的`extern`声明辨析 #### 1. `extern`声明的基本概念 `extern`关键字在C语言中主要用于声明外部变量或函数。它表明当前文件中使用的某个变量或函数是在另一个文件中定义的。`extern`的使用有助于模块化...

    const,extern,static,volatile的使用

    ### const、extern、static、volatile 的使用详解 #### 一、const 的使用 **1. 为什么使用 const** `const` 关键字在 C 和 C++ 编程语言中非常常见,它用来声明一个常量或者指定某个变量的某个方面为不可变。使用...

    浅谈C/C++中的static与extern关键字的使用详解

    在C/C++编程语言中,`static`和`extern`关键字扮演着至关重要的角色,它们影响着变量和函数的存储、生命周期以及作用域。下面将详细阐述这两个关键字的使用和意义。 首先,我们来看`static`关键字。在C语言中,`...

    extern关键字的作用extern的用法,本文较详细的介绍了extern的用法及注意事项.zip

    extern static void GetSystemTime([Out] SYSTEMTIME lpSystemTime); ``` 三、注意事项 1. 无方法体:`extern`声明的方法不包含方法体,因为它的实现是在其他地方。如果编译器找不到对应的实现,程序会报错。 2. ...

    extern和static的详细用法

    ### extern和static的详细用法 #### 一、引言 在编程中,尤其是在C/C++这类语言中,`extern`和`static`是两个重要的关键字,它们在控制变量的作用域以及链接可见性方面扮演着关键角色。正确理解和运用这两个关键字...

    ButterWorth巴特沃斯滤波库

    public extern static void DeleteFilter(IntPtr filter); [DllImport("V_Filter.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public extern static double FilterProcess...

    extern、static修饰变量的使用及define和const区别

    extern、static修饰变量的使用及define和const区别可结合博客http://blog.csdn.net/error/404.html?from=http%3a%2f%2fblog.csdn.net%2faiyang10%2farticle%2fdetails%2f49448591理解

    从指定文件byte[]内存数组加载非托管DLL API

    public extern static IntPtr GetProcAddress(IntPtr handle, String funcName); [DllImport("kernel.dll", EntryPoint = "MemFreeLibrary")] public extern static bool FreeLibrary(IntPtr handle); #...

    c语言中static和extern的用法详细解析

    一,static和extern:大工程下我们会碰到很多源文档。文档a.c 代码如下:static int i; //只在a文档中用int j; //在工程里用static void init() //只在a文档中用{}void callme() //在工程中用{ static int sum;}...

    extern,static以及const修饰变量的不同用法

    ### extern、static以及const修饰变量的不同用法 #### 一、概述 在C语言中,`extern`、`static` 和 `const` 是三个非常重要的关键字,它们在定义变量时起到不同的作用。本文将深入探讨这三个关键字分别在定义全局...

    static,const,volatile用法

    - 如果在一个源文件内定义了一个外部静态变量(extern static),则该变量在其他源文件中也可见,但不能被修改。 - **局部作用域内的静态变量**: - 在函数内部定义的静态变量在整个程序运行期间只初始化一次,并...

    全局变量、extern、static、const区别与联系.doc

    C++知识点: 全局变量、extern、static、const区别与联系.doc

    c#调用c++库函数参数类型转换.docx

    注意在每个函数的前面加上 public static extern + 返回的数据类型,如果不加 public,函数默认为私有函数,调用就会出错。 总结 在本文中,我们讨论了 C# 调用 C++ 库函数参数类型转换的问题,包括数据类型转换...

    百度人脸识别离线SDKV1.1版封装动态库供C#调用

    public extern static void Match(string image1, int img_type1, string image2, int img_type2, ref StringBuilder res);//人脸1:1对比编码字符串 sdk调用流程: 初始化 -> 图片对比 -> 销毁 具体详细的windows-...

    C#禁用任务管理器热键

    private extern static bool FuckSysKey(bool enAble); private void button1_Click(object sender, EventArgs e) { FuckSysKey(false); } private void button2_Click(object sender, EventArgs e) { ...

    C#调用C++编写的COMDLL.pdf

    extern static int FunctionName(byte param1, ushort param2); ``` 2. **P/Invoke调用约定**: 由于C++函数通常使用`__stdcall`调用约定,C#中的DllImport特性用于指示应使用P/Invoke(Platform Invoke)来调用...

    C#调C++动态类库(DLL) (2).docx

    声明时,函数需被标记为`extern static`。例如: ```csharp [DllImport("COM DLL path/file")] extern static int FunctionName(byte param1, ushort param2); ``` 下表列出了部分常见的C++和C#数据类型的对应关系...

Global site tag (gtag.js) - Google Analytics