全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

2024-04-11 00:32

本文主要是介绍全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?   

     

    答:可以,在不同的C文件中以static形式来声明同名全局变量。   可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错.    

     

     

    -------1. 请高手用VC举个例子.

           2. 如何在不同的C文件中以static形式来声明同名全局变量?

答案

  • 2008年7月22日 7:58
    Jimt200010 的头像
    Jimt200010
    2,495
    已答复
    登录进行投票
    0
    登录进行投票

    全局变量可不可以  定义在  可被多个.C文件包含的  头文件中  ?为什么?

     

    答:可以,extern 和 static 都行,但有一点需要注意,看例子

     

    我们有一个 global.h 文件和三个 c 文件

     

     

    Code Snippet

    // global.h ,注意这里绝对不能赋初值

    static int g_current;

    extern int g_count;

     

     

     

    Code Snippet

    // a.c

    #include global.h

     

    void func1()

    {

      g_current++;

      g_count = 3;

    }

     

    // 主入口,这里无关紧要

    int main()

    {

      return 0

    }

     

     

     

    Code Snippet

    // b.c

    #include global.h

     

    void func2()

    {

      g_current++;

      g_count = 5;

    }

     

     

     

    Code Snippet

    // c.c

    #include global.h

     

    void func3()

    {

      g_current--;

      g_count = 11;

    }

     

     

    这样的话三个c文件就是公用这两个全局变量了。但还有一些问题:

    对于 extern int g_count  编译不通过,因为大家都是 extern,没有一个是实体

    对于 static int g_current 编译可以通过,但逻辑不对,因为没有初始化,这个static变量就没有任何意义了

     

    所以实际使用中需要对其中的任何一个c文件做一下改进,比如入口函数所在的 a.c

     

    Code Snippet

    // a.c

    #include global.h

     

    int g_count;  // 这里才是真正的定义,其他地方的都是引用这里的

                  // 虽然这里也在h中声明了一次extern,但没有影响

     

    void func1()

    {

      g_current++;

      g_count = 3;

    }

     

    // 主入口,这里无关紧要

    int main()

    {

      g_current = 0;  // 对static变量初始化。由于无法在定义时做,那么就在入口函数里完成好了。

      return 0

    }

     

     

    之后编译运行都正常。

    原文地址: http://social.msdn.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/5ed926a7-5572-440e-bd20-e387690f5c43/

这篇关于全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/892587

相关文章

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Python中局部变量和全局变量举例详解

《Python中局部变量和全局变量举例详解》:本文主要介绍如何通过一个简单的Python代码示例来解释命名空间和作用域的概念,它详细说明了内置名称、全局名称、局部名称以及它们之间的查找顺序,文中通... 目录引入例子拆解源码运行结果如下图代码解析 python3命名空间和作用域命名空间命名空间查找顺序命名空

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D