C变量范围在struct中

gol*_*ean 0 c struct

我最近遇到了三个不同的情况C,我会帮助:

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

    int ref_buf; //declared in a header file
    
    Run Code Online (Sandbox Code Playgroud)

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

    void fun(int ref_buf, param2, param3)
    {
    }
    
    Run Code Online (Sandbox Code Playgroud)

    它会覆盖最初定义的全局变量并导致错误吗?

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

    struct my
    {
        int a;
        static int b;
    };
    
    Run Code Online (Sandbox Code Playgroud)

    它有用吗?是否有人需要它的具体情况?

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

    struct my
    {
        int a;
        int b = 4;
    };
    
    Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 7

问题1

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

问题2

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

问题3

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

my create_my() {
  my m;
  m.b = 4;
  return m;
}
Run Code Online (Sandbox Code Playgroud)