C

2023-10-28

我们想定义一个全局变量,能够在多个文件中使用,举例说明比如说三个文件main.c hello.c hello.h
想在main.c和hello.c中使用一个名字为a的变量,可能大家会简单地想直接在hello.h里面定义一个变量unsigned int a;
然后在main.c和hello.c中引用"hello.h"就可以直接使用了,但这是编译器会报重复定义变量的错误,我们可以怎么做呢?

  • 方法很简单,直接举例说明:

  • hello.h

#ifndef HELLO_H_
#define HELLO_H_
extern int a;
void fun ();
#endif
  • hello.c
#include <stdio.h>
#include "hello.h"
int a = 0;
void fun () {
	a = 1;
	printf("%d\n",a);
}

  • main.c
#include <stdio.h>
#include "hello.h"
int main () {
	fun();
	a = 10;
	printf("%d\n",a);
	return 0;
}

输出结果为1,10;
extern关键字来声明变量为外部变量,而为什么要在hello.h文件中已经extern int a了还要再在hello.c文件中定义int a呢?

  • 这是因为extern仅仅是作为一个声明,声明我要定义一个外部全局变量a可以在其他文件和模块中使用,但此时并为给a分配空间。
  • 而int a = 0;则才是真正对a的定义,为其分配空间。

那么问题又来了,我们为什么不写成extern int a = 0;的形式不是更简单吗?

  • 这就涉及到c的一个基本知识点了也就是extern int a = 0和int a = 0同样都是对a的定义,只不过第二种是省略了extern而已。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 的相关文章

随机推荐

  • Bash 等待命令

    wait是等待给定作业完成并返回的命令退出状态等待的命令 自从wait命令影响当前 shell 执行环境 它在大多数 shell 中作为内置命令实现 在本文中 我们将探讨 Bash 内置功能wait命令 Bash wait命令 的一般语法w
  • 如何在 Ubuntu 18.04 上安装 Nginx

    Nginx 发音为 engine x 是一个免费 开源 高性能的 HTTP 和反向代理服务器 负责处理互联网上一些最大网站的负载 Nginx 可以用作独立的 Web 服务器 也可以用作反向代理 for Apache和其他网络服务器 与 Ap
  • 如何在 Linux 中列出 Cron 作业

    Cron 是一个调度守护程序 允许您安排按指定时间间隔执行任务 这些任务称为 cron 作业 可以安排按分钟 小时 每月的某一天 每月 每周的某一天或这些的任意组合运行 Cron 作业通常用于执行系统维护操作 例如 可以设置 cron 作业
  • 如何在 Ubuntu 18.04 上安装 Eclipse IDE

    Eclipse是使用最广泛的Java集成开发环境 IDE 它可以通过插件进行扩展 也可以用于其他编程语言的开发 例如 C JavaScript 和PHP Ubuntu 存储库中提供的 Eclipse 安装包 版本 3 8 1 已过时 最简单
  • 设置 Nginx 反向代理

    反向代理是一种接受客户端请求 将请求发送到一个或多个代理服务器 获取响应并将服务器的响应传递给客户端的服务 由于其性能和可扩展性 NGINX 通常用作 HTTP 和非 HTTP 服务器的反向代理 典型的反向代理配置是将Nginx放在前面No
  • chmod 777 是什么意思

    您正在尝试修复您的Web服务器的权限问题 并在互联网上找到了信息 说您需要递归chmod 777网络目录 在此之前 请确保您了解什么是chmod R 777这样做 以及为什么永远不应该将权限设置为 777 本文解释了基本的 Linux 权限
  • 为什么更推荐使用组合而非继承关系?

    前言 最近在看公司项目的代码 看到了大量的继承体系 而且还是继承了多层 维护 阅读都十分的困难 在查阅了一些资料以后 包括 Effective Java 一书中的第16条提到 组合优先于继承 那继承到底会暴露什么问题呢 为什么更推荐优先使用
  • Arduino搭建盲猜数字小游戏

    1 本文整理自视频 太极创客 零基础入门学用Arduino 第一部分 合辑 需要的硬件 一个Arduino Uno开发板 一个200 500欧姆电阻 一个共阴极数码管 一个按键 数条杜邦线 跳线 2 显示数字其实就是显示各个数码管 注意需要
  • 重温Linux内核:互斥和同步

    文章目录 互斥和同步 1 前言 2 概念 2 1 竞态 2 2 共享资源 临界资源 2 3 造成竞态的根本原因 3 并发分类 解决竞态的方法 4 中断屏蔽 5 原子变量 5 1 定义 5 2 实现原理 5 3 API 5 4 注意事项 6
  • 开发踩坑日常 (parseInt进制转换,文字方向、换行,代理请求,xlsx)

    日常踩坑填坑 js进制转换 刚发现有同学没搞清楚这个 parseInt number 进制数 将任意进制 转换 为十进制 强调一下 第二个参数 是形容第一个参数是什么进制的 并不是转换的目标进制 这里贴一下W3C 的文档说明 https w
  • 【转载】windows和wls文件互通

    windows和wls文件互通 wsl访问windows文件 https www jianshu com p d332e05adb6f windows访问wsl文件 https blog csdn net Caoyang He articl
  • Android 之 WebView (网页视图)基本用法

    本节引言 本节给大家带来的是Android中的一个用于显示网页的控件 WebView 网页视图 现在Android应用 层开发的方向有两种 客户端开发和HTML5移动端开发 所谓的HTML5端就是 HTML5 CSS JS来构建 一个网页版
  • TCPIP技术实验大作业:基于TCP/IP的程序开发技术综述及应用实践

    一 基于TCP IP的程序开发技术综述 1 1TCP IP协议族简介 TCP IP也被称作传输控制协议 网际协议 作为网络互连的核心协议 受到广泛的应用 该协议类型作为开放性的标准应用在各种计算机中 在一定程度上保证系统间通信的正常运行 在
  • mysql replication环境检查脚本

    author skate time 2013 05 13 mysql replication环境检查脚本 此脚本部署在slave端 可以通过短信或邮件监控slave的mysqld健康 replication环境健康 及复制延迟 脚本 mys
  • monorepo 下的 package tsc 构建

    很多个package都需要构建到每个项目的 lib 下 可以用 vscode 的 tasks json 任务去实现 具体 tasks json 的详情请看官网 https code visualstudio com docs editor
  • JavaScript中字符串的大小写转换(轮子,直接cv即可)

    此文件为js文件 封装模块按需导出即可 str 需要首字母转换的字符串 全部大写 export const all2Large str gt const arr str split let newStr 通过数组的forEach方法来遍历数
  • 解决Ubuntu下 anaconda 与ros opencv冲突的问题

    解决Ubuntu下 anaconda 与ros opencv冲突的问题 问题描述 解决办法之一 问题描述 在Ubuntu16 04上先后安装了Anaconda和ROS 然后在anaconda配置的pytorch环境中运行python代码 在
  • 【毕设】基于CycleGAN的风格迁移【一】环境搭建及运行代码

    源代码地址 CycleGAN源码 因为该篇内容包含Anaconda的环境管理及包的管理 可以选择参考 Anaconda安装 环境管理 包管理 实际演练例子 全网最详细 MrRoose1的博客 CSDN博客 一 搭配环境 1 首先把代码包下载
  • 递归、回溯-图的m着色问题

    1 问题描述 给定无向连通图G V E 和m种不同的颜色 用这些颜色为图G的各顶点着色 每个顶点着一种颜色 是否有一种着色法使G中每条边的2个顶点着不同颜色 这个问题是图的m可着色判定问题 输入 图的顶点的个数 颜色种类树m 输出顶点a与顶
  • C

    我们想定义一个全局变量 能够在多个文件中使用 举例说明比如说三个文件main c hello c hello h 想在main c和hello c中使用一个名字为a的变量 可能大家会简单地想直接在hello h里面定义一个变量unsigne