结构中的 C 变量范围

标签 c struct

我最近在 C 中遇到了三种不同的情况,我会在以下方面提供帮助:

  1. 我的 C 代码有一个全局变量:

    int ref_buf; //declared in a header file
    

    在函数定义中,我使用与参数相同的名称:

    void fun(int ref_buf, param2, param3)
    {
    }
    

    会不会覆盖原来定义的全局变量,会不会导致bug?

  2. 我可以像这样在 C 数据结构中声明静态变量吗?:

    struct my
    {
        int a;
        static int b;
    };
    

    有用吗?有什么特定情况需要它吗?

  3. 我可以按如下方式初始化单个结构变量吗:

    struct my
    {
        int a;
        int b = 4;
    };
    

最佳答案

问题一

该函数中对 ref_buf 的所有引用都将绑定(bind)到参数而不是全局变量。

问题2

这在 C 中是不合法的,但在 C++ 中是合法的。 C 中的关键字 static 只能用于文件范围变量或局部变量。

问题3

不,这在 C(或 C++)中是不合法的。您将需要创建一个工厂方法来处理这个问题。

my create_my() {
  my m;
  m.b = 4;
  return m;
}

关于结构中的 C 变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/806931/

相关文章:

c - 错误 : In C, 在结构指针中得到错误 "dereferencing pointer to incomplete type"

swift - Swift 5 : What's 'Escaping closure captures mutating ' self' parameter' and how to fix it

c - 强制两个无符号字符合并

c - nvidia cuda使用机器的所有核心

c - 在 C 编译时检测 --prefix 位置

c - 生成带有前缀的宏的宏函数(避免字符串化)

c++ - 一个结构中的条件变量、互斥锁和标志

c++ - Class' Struct 在头文件中的函数声明和 cpp 中的定义。 lnk2019 在单独的库中使用函数时

Swift Struct 的引用计数

c - 传感器故障。更换 Arduino Wire 库时遇到问题