全局变量可不可以定义在可被多个.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代码示例来解释命名空间和作用域的概念,它详细说明了内置名称、全局名称、局部名称以及它们之间的查找顺序,文中通... 目录引入例子拆解源码运行结果如下图代码解析 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

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3