我在看ArduCopter代码。我看到 ArcuCopter.pde 中声明为静态的变量很少.然而,这些变量在其他 .pde 文件中被调用。例如对象 g 定义为 here作为静态的,它用于其他Attitude.pde文件多次像 this例子。
据我所知,静态成员的范围仅限于文件,不能在其他文件中调用。所以我的问题是如何做到这一点?有没有办法按原样访问其他文件中定义的静态成员?
最佳答案
您是否可能混淆了"file"和“翻译单元”。
引用这里 http://port70.net/~nsz/c/c99/n1256.html#6.2.2
您可以使用在其他 中声明的静态对象的标识符。文件 只要它们属于同一翻译单位 (并在使用时适当声明......)。
翻译单元是一个(通常是名义上的)文件,由源文件(可能是 .c 或 .cpp)和它的 #include
组成。指令“扩展”。
您可以在另一个翻译单元中“使用”声明为静态的数据。但不是标识符。如何?
愚蠢的.h :
static int x=0;
int nextX(void);
愚蠢的.c
#include "daft.h"
int nextX(void){
return ++x;
}
我的.c
#include <stdlib.h>
#include <stdio.h>
#include "daft.h"
int main(void){
printf("%d\n", nextX());//outputs 1.
printf("%d\n", x);//prints 0.
return EXIT_SUCCESS;
}
我们假设
daft.c
和 my.c
是源文件。他们的两个翻译单元都有一个标识符 x
对于内部链接 int
.这两个标识符和对象的存储无关!
调用
nextX()
访问标识符 x
的存储内部链接在 daft.c
.直接访问x
访问my.c
中内部链接的标识符.除非声明了标识符
const
有static
头文件中的链接标识符通常会导致麻烦。
关于C++:可以在多个文件中调用静态变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28088361/