我有一个问题要问两个文件之间传递静态变量。
现在我有一个文件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中的静态变量,所以如果我真的需要这样做,我该怎么办?
答案 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)
静态限定符意味着该名称对链接器不可用,因此您无法通过其名称从其他文件直接访问该变量,但还有其他方法可以访问变量。
你需要做两件事:
答案 4 :(得分:0)
解决方案1:
把func()
放在A.c.这是它应该属于的地方。 (编辑[感谢Ben Voigt ]:但如果func()
使用C ++功能,则可能不会这样做。)
解决方案2:
在A.c中编写get_static_variable()
和set_static_variable()
函数,并从B.c。
注意:我认为您提供的代码包含拼写错误,我按照您的说明进行操作。