在C头声明和定义静态变量?

Many other questions处理如何通过在头文件中声明变量并在.cpp文件中定义(分配)来分配变量.

我想做的不是为我的类使用任何.cpp文件,并将所有函数定义为内联(在头文件中).我遇到的问题是如何定义静态成员变量,以便即使.h文件包含在多个编译单元中,我也没有得到“第一个定义的”链接错误.

我打开预处理器黑客等,如果它完成工作.我只想避免任何.cpp文件.

如果重要的是我使用GCC.

解决方法

您可以滥用单例模式,如果您真的必须避免任何.cpp文件
class Foo {
    public:
        static Bar& getMyStatic() {
            static Bar bar;
            return bar;
        };
};

这是因为现在变量是一个函数内的一个静态变量,静态在函数上下文中具有不同于在类上下文中的含义.对于函数,链接器可以识别多个相同的定义并抛出副本.

但是,当然,我强烈建议不要使用.cpp文件:这意味着你会陷入一种情况,在这种情况下,你必须构建整个程序,或至少大部分的程序.您所做的每一个改变都将需要一个完整的重建,这会显着减慢您的更改 – 编译测试周期.对于可能不是问题的非常小的项目,但它是中等到大的项目.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录<future>future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...