2010-10-02 17 views
4

我有一个问题需要在两个文件之间传递静态变量。在C/C++中的两个文件之间传递静态变量

现在我有一个文件交流和第二文件B.cpp

交流

static struct { 
    int 
    int 
} static_variable 

现在AC具有调用一个函数func()在B.cpp,而这个功能有修改在AC

static_variable

在B.cpp

func() { 

    static_variable = ***; 

} 

我UND如果我真的需要这样做,我该怎么办?

回答

0

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

其次,你有没有什么声明静态...

最后,我真的不知道你想要做什么......你当然可以通过结构到功能,在许多不同的方式...

11

static整点是给一个对象或函数的内部链接,所以你不能从翻译单元外引用它。如果这不是你想要的行为,那么你不应该把它变成静态的。您可以在一个翻译单元中定义它,并在另一个翻译单元中声明extern

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

0

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

你需要做两件事情:

  1. 确保有问题的结构的声明是提供给B.cpp(即把申报双方包含的头文件)
  2. 山口指向函数的变量(或在C++中,引用)。这可以直接作为参数,也可以通过非静态变量(uglier!)。
1

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

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

使用的setter /吸气有一堆的优点:

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

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

解决方法2:在交流转换器get_static_variable()set_static_variable()功能,从公元前给他们打电话

注意:我认为您提供的代码包含错字,我遵循您的描述。

+0

如果'func()'使用C++功能(现在在.cpp文件中),则解决方案1可能不可行。 – 2010-10-02 22:53:28

+0

嗯,你是对的。没有注意到它是在cpp文件中。 – Donotalo 2010-10-02 22:58:26

相关问题