`
WindMill
  • 浏览: 16118 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

static extern 在大工程中的运用

阅读更多
转摘地址:
http://blog.sina.com.cn/s/blog_5e615bc70100c8ku.html


一,static和extern:
    大工程下我们会碰到很多源文件。

文件a.c
static int i; //只在a文件中用
int j;   //在工程里用
static void init()         //只在a文件中用
{
}
void callme()          //在工程中用
{
   static int sum;
}

上面的全局i变量和init()函数只能用在a.c文件中,全局变量sum的作用域只在callme里。变量j和函数callme()的全局限扩充到整个工程文件。所以可以在下面的b.c中用extern关键字调用。extern告诉编译器这个变量或者函数在其他文件里已经被定义了。

文件b.c
extern int j;    //调用a文件里的
extern void callme();  //调用a文件里的
int main()
{
  ...
}

extern的另外用法是当C和C++混合编程时如果c++调用的是c源文件定义的函数或者变量,那么要加extern来告诉编译器用c方式命名函数:

文件A.cpp调用a.c里面的变量i和函数callme()
extern "C"  //在c++文件里调用c文件中的变量
{
   int j;
   void callme();
}
int main()
{
   callme();
}

二,static法则:
    A、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
    B、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
    C、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
分享到:
评论

相关推荐

    extern和static的详细用法

    在编程中,尤其是在C/C++这类语言中,`extern`和`static`是两个重要的关键字,它们在控制变量的作用域以及链接可见性方面扮演着关键角色。正确理解和运用这两个关键字能够帮助开发者更好地管理代码中的数据共享与...

    C语言中关键字const、static、volatile、extern、auto、register的用法分析.doc

    Extern关键字的作用是告诉编译器,有一个变量或函数,它可能不存在当前的文件中,但它肯定要存在于工程中的某一个源文件中或者一个DLL的输出中。 例如: ```c extern int a; ``` 五、auto关键字 Auto关键字的作用...

    extern在C和C++中的作用

    ### `extern`在C和C++中的作用 #### 前言 在程序设计领域,尤其是在C和C++这两种广泛使用的编程...特别是在大型项目中,合理运用这些关键字可以极大地提高代码的模块性和可读性,同时也是实现跨语言编程的基础之一。

    C#调用api接口

    使用extern关键字来修饰API函数,表示该方法将在工程外部执行,同时使用DllImport 导入的方法必须使用extern修饰符。例如,[DllImport("kernel32")] public static extern void GetWindowsDirectory(StringBuilder ...

    extern外部方法使用C#的实现方法

    在实际应用中,我们可能需要在按钮点击事件或其他适当的地方调用这个外部方法。以下是一个简单的例子: ```csharp private void btnDisplay_Click(object sender, EventArgs e) { StringBuilder pathstring = new ...

    C语言中static关键字的几种用法总结

    - **非静态函数**:默认情况下,函数在整个源文件或工程中都是可见的,可以直接在其他文件中调用,无需`extern`声明。 - **静态函数**:在函数声明前加上`static`关键字,使得函数仅在其定义的源文件内可见,其他...

    C#调用C++动态库的例子工程

    在.NET框架中,C#是一种高级编程语言,它允许开发者利用丰富的类库和强大的功能来构建应用程序。然而,有时我们可能需要与非托管代码交互,例如C++编写的动态链接库(DLL)。C++动态库提供了对底层系统操作的直接...

    C#托管代码与C++非托管代码互相调使用.pdf

    例如,在C++中建立一个名为CppDemo的DLL工程,并在其中添加一个名为Add的函数: ```c extern "C" __declspec(dllexport) int Add(int a, int b) { return a + b; } ``` 然后,在C#中建立一个名为InteropDemo的...

    static_library_demo.zip

    总结,本示例(static_library_demo.zip)提供了一个Android项目,演示了如何将C/C++代码编译成静态库,并在Android应用中调用和测试。通过这个过程,开发者可以学习到Android原生开发中的静态库创建、链接及真机...

    资深工程师总结的单片机C语言常用算法.zip_C language_genetic algorithm_organization

    在单片机应用中,遗传算法可以用于解决如资源分配、任务调度等问题,具有全局优化和并行计算的特性,适合处理复杂优化问题。 四、单片机算法 单片机工程师需要掌握特定领域的算法,例如数字信号处理、中断服务、...

    KingviewDemo_kingvewcliend.dll开发_C#组态王读写_组态王_

    KingviewDemo.sln和KingviewDemo项目文件可能是示例代码或应用程序,它们展示了如何在实际工程中运用上述技术。通过打开并研究这些文件,开发者可以更深入地了解kingvewcliend.dll的使用方式,以及如何在C#中构建与...

    VS2010 C 调用C++ DLL文件 图文讲解

    只需确保DLL文件与C#应用程序在同一目录下,就可以在C#代码中直接调用ReadPort和WritePort函数,实现与硬件的通信。这种方法简化了在Windows环境中实现硬件交互的步骤,减少了编写设备驱动程序的需求,提高了开发...

    C#调用c++工程文件(调试已通过)

    在实际应用中,可能还会涉及到更复杂的场景,如结构体传递、回调函数等。通过熟练掌握P/Invoke和适当的数据类型映射,你可以灵活地在C#和C++之间进行交互,实现跨语言的功能整合。在提供的压缩包文件中,包含了C#...

    CreateRemoteThread DLL源码

    需要注意的是,DLL注入技术虽然有其合法用途,但往往也被滥用于恶意软件中,因此在实际应用中应谨慎处理,确保符合安全和隐私标准。此外,对于权限控制和反病毒软件来说,DLL注入可能被视为可疑行为,可能导致程序被...

    C语言软件工程师笔试题大全.docx

    C语言是计算机编程的基础,尤其在软件工程领域中,C语言因其高效、低级特性和广泛应用,成为许多软件工程师笔试面试的重要考核内容。本篇文档《C语言软件工程师笔试题大全.docx》涵盖了许多关键知识点,以下是这些...

    Unity+WindowsForms PC端接收蓝牙数据

    注意,实际应用中可能还需要处理错误和异常,确保程序的健壮性。同时,由于跨进程通信的复杂性,确保Unity与Windows Forms之间的数据交换是安全且高效的也非常重要。此外,为了实现更好的用户体验,可能需要在Unity...

    WINCE 软键盘 C# API

    "反Coredll"在这里是指通过逆向工程Coredll.dll库,理解其内部的函数调用和工作原理,以便在C#中重新实现或模拟这些功能。这种方法可以让开发者在不依赖Coredll的情况下,自定义软键盘的行为,增强系统的可定制性和...

    嵌入式硬件工程师入门-单片机C语言

    了解不同类型的存储器以及如何在C语言中访问它们,例如,通过extern关键字声明全局变量,或者使用static关键字限制变量的作用域。 最后,进行实际的硬件连接和调试是学习过程中的重要环节。学会使用示波器、逻辑...

    利用SendMessage函数操作系统窗体

    在IT领域,Windows API是操作系统提供的一系列函数,允许开发者直接与操作系统进行交互。本话题主要探讨如何在C#编程环境中利用FindWindow和...因此,在实际应用中应确保遵循软件工程的最佳实践和相关法律法规。

Global site tag (gtag.js) - Google Analytics