何时在全局变量前使用 static 关键字?

2024-02-03

有人可以解释一下何时应该在头文件中定义的全局变量或常量之前使用 static 关键字吗?

例如,假设我有一个包含以下行的头文件:

const float kGameSpriteWidth = 12.0f;

这个应该有static在...前面const或不?使用的一些最佳实践有哪些static?


你不应该define头文件中的全局变量。 您应该在 .c 源文件中定义它们。

  • 如果全局变量仅在一个 .c 文件中可见,则应将其声明为静态。

  • 如果要在多个 .c 文件中使用全局变量,则不应将其声明为静态。 相反,您应该在所有需要它的 .c 文件包含的头文件中声明它 extern。

Example:

  • 示例.h

    extern int global_foo;
    
  • foo.c

    #include "example.h"
    
    int global_foo = 0;
    static int local_foo = 0;
    
    int foo_function()
    {
       /* sees: global_foo and local_foo
          cannot see: local_bar  */
       return 0;
    }
    
  • bar.c

    #include "example.h"
    
    static int local_bar = 0;
    static int local_foo = 0;
    
    int bar_function()
    {
        /* sees: global_foo, local_bar */
        /* sees also local_foo, but it's not the same local_foo as in foo.c
           it's another variable which happen to have the same name.
           this function cannot access local_foo defined in foo.c
        */
        return 0;
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时在全局变量前使用 static 关键字? 的相关文章

  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • std::bind 重载解析

    下面的代码工作正常 include
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens

随机推荐

  • 在数据库中存储不同图像的最佳方式是什么?

    为不同目的存储图像的最佳方法 关于数据库设计 是什么 我有一堆用户照片 还有另外 5 组不同的照片 类似于用户照片 但与用户照片没有联系 最好是将所有照片存储在一个数据库表中并尝试从该表中引用它们 还是最好为每组照片创建不同的表 我可以看到
  • masm 错误 A2075:跳转目的地太远:30 个字节

    我的女士给我布置了一个作业 其中我必须编写一个程序 该程序将通过键盘获取输入并检查嵌套括号的常规顺序 例如 input output 正确的格式 input output 不正确 我的程序 model small stack 100h 38
  • Spring AutoPopulateList 最大大小?

    我对 Spring 自动填充列表有疑问 我的用例如下 管理可以访问应用程序的用户列表 在 GUI 方面 我使用自动完成字段来搜索用户并将用户添加到右侧的表中 用户也可以从表中删除 当 GUI 用户提交时 GUI 会动态构建一个包含用户字段的
  • 读取文本文件的行并收到 Charmap 解码错误

    我使用 python3 3 和 sqlite3 数据库 我有一个大约 270mb 的大文本文件 我可以在 Windows7 中使用写字板打开它 该文件中的每一行如下所示 术语 t编号 n 我想读取每一行并将值保存在数据库中 我的代码如下所示
  • java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

    我有一个旧的 struts 1 应用程序 一直使用 Ant 构建 我正在将其转换为使用 Maven 我的应用程序的结构是模块化的 在包含模块中进行依赖管理 包含模块的 dep mgmt 部分包含
  • 在 switch-case 中创建一个对象

    我使用 Visual Studio 2008 C 在我的开关案例中 a 想要创建一个对象 但我不工作 我无法在开关盒中创建对象 对吗 如果这是正确的 解决这个问题的最佳方法是什么 创建该对象的新方法 编辑代码 switch causwahl
  • Laravel 在身份验证后重定向到登录

    PROBLEM 我正忙于我的第一个 Laravel 应用程序 尽管我看到了这种编写方式的好处 但我很难理解其中的一些行为 当我尝试登录时 我被重定向到登录页面 看起来用户身份验证正确 但无论如何它都会重定向到登录页面 我拥有的 我的用户表如
  • 在 python 中迭代和更新列表[重复]

    这个问题在这里已经有答案了 我无法理解为什么下面的代码会无限期地出现 循环 当我不使用复制列表时 list Mohit kumar sffsfshfsd for w in list if len w gt 5 list insert 0 w
  • 在 JPA 上选择 DISTINCT

    我有一张桌子ISO 4217 值 https en wikipedia org wiki ISO 4217货币 有 6 行 ID 国家 地区 货币名称 字母代码 数字代码 次要单位 我需要获取一些数据4种最常用的货币 https en wi
  • 错误 C2143:语法错误:缺少 ';'在“输入”之前

    我是 C 编程新手 请告诉我这个程序有什么问题 以及为什么我收到此错误 错误 C2143 语法错误 缺少 在 输入 之前 extern void func int main int argc char argv func int i 1 f
  • cf run-task 运行前需要上传 env/script 吗?一种优雅的方式?

    我正在与 Cloud Foundry 合作 My need是在我的应用程序之外运行数据库迁移 以便我可以在需要时以某种方式 cf 命令 api 调用等 触发迁移 我被推荐使用cf run task 经过检查 我的理解是 cf run tas
  • 将 pandas 数据框中每个组的多个列的值折叠成一组的 pythonic 方法是什么?

    给定一个数据框 将列的每组值折叠为一组很简单 df groupby A B apply set 但是 如果您想在多个列上执行此操作并且结果位于数据框中 那么如何以Pythonic方式执行此操作呢 例如对于以下数据框 import panda
  • VS code中Monokai Pro主题的大写颜色问题

    在Monokai Pro颜色主题中 我的一些以大写开头的参数显示为紫色 例如 DP piping 如下所示 有什么方法可以将其恢复为白色 就像我的其他参数一样 我尝试切换到另一个主题 但其他主题对我来说不舒服或有相同的问题 任何变量之前有超
  • -[UITableViewDelegate willDisplayCell:forRowAtIndexPath:] 是什么?

    在我所有的UITableView编程时 我总是配置我的UITableViewCells in UITableViewDataSource tableView cellForRowAtIndexPath 现在我遇到了 UITableViewD
  • 使用 Jest 和 Enzyme 测试 FaC 时未找到 React Node 节点

    我正在 React Native 中构建一个应用程序 我们最近开始在应用程序中使用 TypeScript 我的任务是迁移单元测试 有一项测试奇迹般地失败了 该应用程序有一个
  • 如何在单个 openshift yaml 模板中拥有多种对象类型?

    以下是名称为 Claim1 的单个 PersistentVolumeClaim 的示例模板 apiVersion v1 kind PersistentVolumeClaim metadata name claim1 spec accessM
  • 如何设置队列以使所有订阅者都能收到消息 - Rabbitmq

    我正在阅读 RabbitMQ in Action 一书 仍在第 2 章中 但作者说的一件事让我感到困惑 您设置一个交换并发送一条消息 两个订阅者正在监听队列 当第一条消息到达时 第一个订阅者会收到它 并且一旦确认该消息就会被删除 当下一个消
  • GitHub Api 下载 zip 或 tarball 链接

    这里有一个关于如何创建 zip tarball 字符串的很好的链接 当我从 github 下载 zip 时 文件名末尾的十六进制字符串代表什么 https stackoverflow com questions 6334040 when i
  • Android OpenOrCreateDatabase 空指针异常

    我在打开数据库时在 EhActivity 类中遇到 NullPointerException public class EHActivity extends Activity ArrayList
  • 何时在全局变量前使用 static 关键字?

    有人可以解释一下何时应该在头文件中定义的全局变量或常量之前使用 static 关键字吗 例如 假设我有一个包含以下行的头文件 const float kGameSpriteWidth 12 0f 这个应该有static在 前面const或不