C语言static和extern关键字

2023-11-18

1.static

  • static修饰的变量,自始至终只有一块空间,当前文件才能使用,生命周期是从定义开始直到程序结束;
  • 全局变量的定义是在.c文件中,但是声明全局变量是在.h中;
  • static:静态型,用它定义的变量自动初始化为0值或空值,常用于修饰变量或函数,只能在当前".c"文件中使用,static类型的变量只用一块空间,并且此变量的值有继承性;
practice.h头文件
//防止此practice.h头文件被很多文件调用使得重复包含
#ifndef _PRACTICE_H
#define _PRACTICE_H
        void call_func();
#endif // !_PRACTICE_H
main.c
#include <stdio.h>
#include "practice.h"
static int i = 10; //static定义变量,只能在当前 main.c 文件中使用
	int main ()
	{
        printf("[%s]i = %d\n",__FUNCTION__,i); //__FUNCTION__代表是在哪个函数
        call_func(); //直接调用接口去调内部的func函数
        return 0;
	}
practice.c源文件
#include <stdio.h>
	//static把func函数隐藏起来,封装一层
	static void func ()
	{
        int i = 2;
        printf("[%s]i = %d\n", __FUNCTION__, i);
	}
	void call_func()
	{
        func();
	}

result:
在这里插入图片描述

2.extern

  • extern不能改变被引用的变量的值和类型,是说明型不是定义用的;
practice.h头文件
//防止此practice.h头文件被很多文件调用使得重复包含
#ifndef _PRACTICE_H
#define _PRACTICE_H
        void func();
#endif // !_PRACTICE_H
main.c
#include <stdio.h>
#include "practice.h" //自定义的头文件用""
	int i = 10; //定义一个全局变量i,其他文件也可以引用
	//程序先进入main主函数,在main里往下调用其他文件或本文件中的功能函数
	int main ()
	{
        printf("[%s]i = %d\n",__FUNCTION__,i); //__FUNCTION__代表是在哪个函数
        func(); //调用func()是在其他文件中的函数,要在头文件中包含一下
        return 0;
	}
practice.c源文件:放源功能函数的定义
#include <stdio.h>
//函数func本身的定义写在本.c文件中
	void func ()
	{
        //extern不能改变被引用的变量'i'的值和类型
        extern int i; //说明变量i是外部引用的
        printf("[%s]i = %d\n", __FUNCTION__, i);
	}

result:
在这里插入图片描述

函数头文件的声明前加extern与不加extern有什么区别
函数默认是extern属性,声明时加不加extern没区别,C语言中,extern修饰符用在变量或函数声明前,说明此变量或函数是在别处定义的,要在此引用;
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言static和extern关键字 的相关文章

  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • 打印 STDOUT/STDERR 并将它们写入 Bash 中的文件?

    有没有办法让 Bash 将 STDOUT STDERR 重定向到文件 但仍然将它们打印到终端 这会将 STDOUT 和 STDERR 重定向到同一个文件 some command 2 gt 1 tee file log Example to
  • EULA 接受 Bash 脚本

    我有一个尝试安装垃圾箱的脚本 除了 bin 在 more 中打开 EULA 之外 一切正常 在脚本再次开始并自行完成安装之前 您必须手动 ctrl c 退出此 more 实例 因为这更多的是逃离 shell 所以脚本在打开后不知道要运行什么
  • 如何使用 PyAudio 选择特定的输入设备

    通过 PyAudio 录制音频时 如何指定要使用的确切输入设备 我的电脑有两个麦克风 一个内置 一个通过 USB 我想使用 USB 麦克风进行录音 这流类 https people csail mit edu hubert pyaudio
  • SIGHUP 用于重新加载配置

    根据signal 7 SIGHUP用于检测控制终端的挂起或控制进程的死亡 然而 我遇到过很多 OSS 守护进程 服务 其中SIGHUP用于启动配置的重新加载 这里有一些例子 hostapd sshd snort etc 这是实现重新加载的标
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul
  • 在bash中用其他文件过滤一个文件

    我有一个带有数字的文件 例如 cat file 31038467 32048169 33058564 34088662 35093964 31018168 31138061 31208369 31538163 31798862 和其他例如
  • C# - OPC-UA 服务器应用程序尚未在 Linux 计算机中创建 PKI 证书

    当我跑步时OPC UA serverWindows 机器中的 C 应用程序 然后 OPC UA 服务器已创建证书路径C ProgramData OPC Foundation pki own 并在此路径中生成一些证书 但是当我在中安装 OPC
  • 如何从外部模块导出符号?

    我在内核源代码树之外进行编码 有两个模块 第一个printt有一个功能printtty 将字符串打印到当前 tty 以及第二个模块hello这会调用printtty 在初始化期间 我已经添加了EXPORT SYMBOL printtty 在
  • 为什么“script”命令会生成 ^[ 和 ^M 字符以及如何使用 vim 搜索和替换删除它们?

    在linux上 使用bash shell 当我使用script命令时 生成的文件称为typescript 当我用 vim 打开该文件时 每一行都包含 M字符 并且有几行 由于我的彩色命令提示符 包含一个字符 我想用任何东西替换这些字符 从而
  • SVN 不断提示我输入密码并拒绝缓存我的凭据

    环境 Eclipse Indigo Ubuntu 11 04 Subclipse 1 6 SVN 客户端 Subclipse RabbitVCS 我通过 svn ssh 连接 我的网址如下所示 svn ssh 我的名字 我的域名 路径 我可

随机推荐

  • unity2D横版游戏教程-1 让人物动起来

    在看完了麦扣老师的小狐狸的视频后 为了巩固练习 我另外找一个素材包来练手 顺便写成一个教程让自己更加熟练 同时当自己遗忘时可以回头查阅 另外 这个教程我写的非常详细 萌新也可以学习 有什么不对的地方或者有疑问的地方 欢迎指正和咨询 首先导入
  • python可视化——matplotlib画图颜色控制

    这里cd整理了python中matplotlib库中color可用的颜色 之前有人整理的是图片版 实际用的时候不怎么方便 因策这里整理了表格 颜色可以选择 方便使用 关于matplotlib中颜色的使用 有很多方式 1 用RGB或者RGBA
  • 给 MSYS2 添加中科大的源

    最近一段时间不知怎么的 使用默认的 MSYS2 源升级软件或是安装新软件的特别的慢 所以就翻了翻国内的几个开源软件的镜像库 发现中科大的库里就有 MSYS2 所以就研究了一下 给 MSYS2 添加了中科大的源 简单的说 msys64 etc
  • 领域驱动设计:DDD重构中台业务模型

    文章目录 如何避免重复造轮子 如何构建中台业务模型 如何避免重复造轮子 要避免重复建设 就要理解中台的理念和思想 中台是企业级能力复用平台 复用 用白话说就是重复使用 就是要避免重复造轮子的事情 中台的设计思想与 高内聚 低耦合 的设计原则
  • Oracle入门笔记(四)——Oracle表约束和表间关系

    Oracle表约束和表间关系 1 Oracle数据表要求 2 Oracle数据表约束 3表间关系 3 1一对一关系 3 1一对多关系 3 1多对多关系 1 Oracle数据表要求 1 必须以字母开头 2 长度不能超过30字符 3 避免使用关
  • 软件测试项目管理系统(STM)

    1 产品介绍 凯云软件测试项目管理系统 Software Testing Management System 简称 STM 是为企业软件测试部门以及第三方软件测试机构打造的统一工作平台 该系统提供规范的测试流程 支持被测件接收 测试需求分析
  • 若依RuoYi-Vue代码学习一---若依如何基于OncePerRequestFilter【Spring Security的过滤器】验证的token与用户信息

    文章目录 一 通过token获取用户信息 二 验证token过期 一 通过token获取用户信息 代码位置 com ruoyi framework security filter JwtAuthenticationTokenFilter 直
  • https://isux.tencent.com/svg-animate.html(svg动画)

    初学SVG的时候 感觉那一坨一坨的代码难读难懂 现在回过头仔细想想 是因为那时候看文档缺少一些具体的实例 导致学习起来很枯燥 如今SVG已经在前端各个领域都有所作为 无论是项目里的应用还是demo都所处可见 这里我就用一个实例的写法带新同学
  • Android 上传头像功能第三方框架Boxing与TakePhoto使用总结

    刚做了个人中心的上传头像功能 就来总结一下做的过程 一开始就直接去github上找一个第三方框架接入 省点事 先是听了朋友的推荐去看了一下bilibili开源的一款Boxing的框架 但是使用起来发现不太符合我的需求 最后还是使用TakeP
  • 【学习排序】 Learning to Rank 中Listwise关于ListNet算法讲解及实现

    前一篇文章 Learning to Rank中Pointwise关于PRank算法源码实现 讲述了基于点的学习排序PRank算法的实现 该篇文章主要讲述Listwise Approach和基于神经网络的ListNet算法及Java实现 包括
  • inno setup打包软件学习

    目录 一 打包结果 二 示例打包脚本 三 错误解决 3 1 另一个程序正在使用此文件 进程无法访问 3 2 桌面图标无法修改 四 参考资料 一 打包结果 测试程序来自 泽森科工 zenustech com 二 示例打包脚本 使用打包软件下载
  • SVN服务器权限设置

    1 authz文件内容 groups admin xiaoming team1 zhangsan admin rw admin具有svnRepos根目录下所有文件的读写权限 组别为team1的人员具有projectname目录下所有文件的读
  • Java并发编程学习1-并发简介

    Java并发编程学习系列 Java并发编程学习 简介 线程的优势 发挥多处理器的强大能力 建模的简单性 异步事件的简化处理 响应更灵敏的用户界面 线程的风险 安全性问题 活跃性问题 性能问题 结语 简介 在早期的计算机中不包含操作系统 它们
  • 钩子函数介绍和总结

    Author 快来救救我 ps 快乐废宅 文章目录 前言 一 钩子函数 Hook 是什么 理解 特点 举例 钩子类型 钩子程序组成部分 钩子操作流程 钩子函数的回调函数 最后 三 参考文章 前言 我看了其他博客有些对钩子函数讲述的篇幅要不太
  • IBM Worklight开发环境安装

    1 安装jdk1 6以上版本 2 下载安装mysql http ftp iij ad jp pub db mysql Downloads MySQL 5 1 mysql noinstall 5 1 62 win32 zip 3 下载mysq
  • 成为黑客第一步:从这五本书开始

    如果您想学习黑客并成为道德黑客 那么这些最好的黑客书籍将带你走上正轨 学习黑客 如果你是一个完整的初学者 并不是一件容易的事 虽然网上有很多资源 但是黑客资源往往很少 因此阅读书籍通常很有帮助 黑客可能会被不道德地使用 还可能对个人和公司造
  • 当HDF5需要重新创建大量group和dataset但是又提示原来的group已经存在怎么办

    描述 我在创建tff数据集的时候 程序里面有循环写到hdf5需要根据某类名字创建group dataset 但是我有的时候会发现这段代码有问题 我需要修改一下循环里面的某些东西然后再重新run 这个时候会提示创建的group或者datase
  • C++ 去掉字符串前后的空格

    基本思路 先去掉字符串头部的空格 再去掉字符串尾部的空格 实现方式一 include
  • ICLR 2023高分论文!ToMe:你的视觉Transformer可以更快!

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 点击进入 gt CV微信技术交流群 转载自 极市平台 作者 科技猛兽 导读 这篇文章提出了一种无需训练即可加速 ViT 模型 提高吞吐量的方法 Token Mergin
  • C语言static和extern关键字

    1 static static修饰的变量 自始至终只有一块空间 当前文件才能使用 生命周期是从定义开始直到程序结束 全局变量的定义是在 c文件中 但是声明全局变量是在 h中 static 静态型 用它定义的变量自动初始化为0值或空值 常用于