全局变量可不可以定义在可被多个.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

相关文章

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

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进阶用法使用