【问题标题】:pass static variable between two files in C/C++在 C/C++ 中的两个文件之间传递静态变量
【发布时间】:2010-10-02 22:17:04
【问题描述】:

我有一个关于在两个文件之间传递静态变量的问题。

现在我有一个文件 A.c 和另一个文件 B.cpp

在交流中

static struct {
   int 
   int 
} static_variable

现在A.c要调用B.cpp中的函数func(),这个函数要修改A.c中的static_variable

在 B.cpp 中

func() {

  static_variable = ***;

}

我了解到B.cpp无法访问A.c中的静态变量,所以如果我真的需要这样做,我该怎么办?

【问题讨论】:

    标签: c++ c static


    【解决方案1】:

    static 的全部意义在于为对象或函数提供内部链接,这样您就无法从翻译单元外部引用它。如果这不是您想要的行为,那么您不应该将其设为静态。您可以在一个翻译单元中定义它并在另一个翻译单元中声明它extern

    即使变量是static,您也可以将指向static 变量的指针传递给另一个翻译单元中的函数。内部链接只适用于变量的名称,您仍然可以通过不需要您命名变量的方式访问它。

    【讨论】:

      【解决方案2】:

      我会在 A.c. 中定义一个 getter 和一个 setter 函数。原型可以放在 A.h.

      然后 B.c 将包含 A.h 并调用 setter 而不是直接设置变量。

      使用 setter/getter 有很多优点:

      • 可以处理并发访问
      • 记录变量更改的中心点

      【讨论】:

        【解决方案3】:

        首先,您的结构无效,因为您没有指定类型的名称。

        其次,你还没有声明任何静态的东西......

        最后,我不确定您要做什么...您当然可以通过多种不同的方式将结构传递给函数...

        【讨论】:

          【解决方案4】:

          静态限定符意味着该名称对链接器不可用,因此您不能从不同的文件通过其名称直接访问该变量,但还有其他方法可以访问一个变量。

          你需要做两件事:

          1. 确保相关结构的声明对 B.cpp 可用(即将声明放在两者都包含的头文件中)
          2. 将指向变量的指针(或在 C++ 中为引用)传递给 func。这可以直接作为参数,也可以(更丑!)通过非静态变量。

          【讨论】:

            【解决方案5】:

            解决方案 1:func() 放入交流电中。这是它应该属于的地方。 (编辑 [感谢 Ben Voigt]:但如果 func() 使用 C++ 功能,您可能不会这样做)。

            解决方案 2: 在 A.c 中编写 get_static_variable()set_static_variable() 函数并从 B.c. 调用它们。

            注意:我假设您提供的代码包含拼写错误,我按照您的描述进行操作。

            【讨论】:

            • 如果func() 使用C++ 特性(毕竟它现在在.cpp 文件中),解决方案1 ​​可能不可行。
            猜你喜欢
            • 2013-10-14
            • 2013-08-17
            • 2012-12-28
            • 1970-01-01
            • 2011-02-08
            • 1970-01-01
            • 2012-10-31
            • 1970-01-01
            • 2023-01-19
            相关资源
            最近更新 更多