在C / C ++中传递两个文件之间的静态变量

时间:2010-10-02 22:17:04

标签: c++ c static

我有一个问题要问两个文件之间传递静态变量。

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

在A.c

static struct {
   int 
   int 
} static_variable

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

在B.cpp

func() {

  static_variable = ***;

}

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

5 个答案:

答案 0 :(得分:11)

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

即使变量为static,您也可以将指向static变量的指针传递给其他翻译单元中的函数。内部链接仅适用于变量的名称,您仍然可以通过不要求您命名变量的方式来访问它。

答案 1 :(得分:1)

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

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

使用setter / getter有很多优点:

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

答案 2 :(得分:0)

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

其次,你没有声明任何静态......

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

答案 3 :(得分:0)

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

你需要做两件事:

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

答案 4 :(得分:0)

解决方案1:func()放在A.c.这是它应该属于的地方。 (编辑[感谢Ben Voigt ]:但如果func()使用C ++功能,则可能不会这样做。)

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

中调用它们

注意:我认为您提供的代码包含拼写错误,我按照您的说明进行操作。