C++:可以在多个文件中调用静态变量吗?

标签 c++ c static arduino

我在看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.cmy.c是源文件。他们的两个翻译单元都有一个标识符 x对于内部链接 int .
这两个标识符和对象的存储无关!
调用 nextX()访问标识符 x 的存储内部链接在 daft.c .直接访问x访问my.c 中内部链接的标识符.

除非声明了标识符 conststatic头文件中的链接标识符通常会导致麻烦。

关于C++:可以在多个文件中调用静态变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28088361/

相关文章:

c++ - 如何在 Qt5 中使 QOpenGLContext 成为当前没有表面的?

c++ - 如何使用 vector 中包含的 double[4][4] 数组?

java - Java中的最终静态变量是线程安全的吗?

c++ - 如何在 header 和 cpp 之间拆分静态/模板类?

java - Java类静态成员的范围

c++ - CARLA RGB相机传感器的输出格式是什么

C++:在当前实例被销毁后创建类的新实例的问题

c - OS如何在虚拟内存中执行二进制文件?

c++ - 如果您在 .h 文件中包含某些内容,您是否必须再次包含相同的内容?

c - 无法识别 time.h 中定义的宏