标签: static-variables

如何从C中的另一个文件访问静态变量?

可能重复:
静态变量

如何从C中的另一个文件访问静态变量?由于静态变量具有文件范围,我认为我们无法在文件外访问它.但我仍然觉得可能有一些技巧或方法来做同样的事情.

c static-variables

5
推荐指数
2
解决办法
1万
查看次数

C 库的 C++ 包装器

最近我发现了一个我想在我的 C++ 项目中使用的 C 库。该代码配置了全局变量,并将其输出写入静态指针指向的内存。当我执行我的项目时,我希望运行 2 个 C 程序实例:一个具有配置 A,一个具有配置 B。我不能运行我的程序两次,所以我认为有 2 个选项:

  • 创建一个C++ 包装器:这里的问题是包装器类应该包含 C 库拥有的所有全局/静态变量。由于 C 库中的函数使用这些变量,我必须为这些函数创建非常大的参数列表。
  • 复制粘贴C 库:在这里,我必须调整 C 库中每个函数和每个变量的名称。

哪一种是最快的解决方案?是否有其他可能性来运行同一 C 源代码的 2 个实例?

谢谢,

最大限度

c c++ global-variables static-variables wrapper

5
推荐指数
1
解决办法
9245
查看次数

我是否以正确的方式使用静电?

我正在编写一个XNA引擎,我将所有模型存储在一个List.为了能够在整个引擎中使用它,我已经做了这个,public static List<Model>所以我可以从我开发的任何新类访问它.它当然使获得模型列表真的很容易获得,但这是正确的用法吗?或者我会更好地在方法声明中传递变量?

c# xna static-variables

5
推荐指数
2
解决办法
1301
查看次数

在类之外声明一个新的静态变量

有没有办法在该类之外声明新的静态变量,即使它没有在类中设置?

// Using this class as a static object.
Class someclass {
    // There is no definition for static variables.
}

// This can be initialized
Class classA {
    public function __construct() {
        // Some codes goes here
    }
}

/* Declaration */
// Notice that there is no static declaration for $classA in someclass
$class = 'classA'
someclass::$$class = new $class();
Run Code Online (Sandbox Code Playgroud)

如何做呢?

谢谢您的建议。

php declaration static-variables

5
推荐指数
1
解决办法
2364
查看次数

使用C预处理器确定当前范围?

我正在使用C/Objective-C开发一个应用程序(请不要使用C++,我已经有了解决方案),我遇到了一个有趣的用例.

因为clang不支持嵌套函数,所以我的原始方法不起作用:

#define CREATE_STATIC_VAR(Type, Name, Dflt) static Type Name; __attribute__((constructor)) void static_ ## Type ## _ ## Name ## _init_var(void) { /* loading code here */ }
Run Code Online (Sandbox Code Playgroud)

这段代码可以用GCC编译好,但由于clang不支持嵌套函数,我得到一个编译错误:

预期';' 在宣言结束时.

所以,我找到了一个适用于Clang函数内部变量的解决方案:

#define CREATE_STATIC_VAR_LOCAL(Type, Name, Dflt) static Type Name; ^{ /* loading code here */ }(); // anonymous block usage
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有办法利用宏连接来为情况选择合适的方法,例如:

#define CREATE_STATIC_VAR_GLOBAL(Type, Name, Dflt) static Type Name; __attribute__((constructor)) void static_ ## Type ## _ ## Name ## _init_var(void) { /* loading code here */ }
#define CREATE_STATIC_VAR_LOCAL(Type, Name, …
Run Code Online (Sandbox Code Playgroud)

scope global-variables static-variables clang nested-function

5
推荐指数
1
解决办法
1064
查看次数

C++ 类方法继承

我最近从 Java 过渡到 C++,在弄清楚类继承的确切工作原理方面遇到了一些困难。目前,我有班级Weapon和班级MinigunMinigun继承该类Weapon,这意味着它应该具有定义的方法和变量Weapon。我的问题是,我有一个名为 的私有常量 static int Weaponrate以及一个返回名为 的整数的公共方法getRate()getRate()只是返回类中定义的速率变量。当Minigunextends Weapon,并且我在 inside 设置速率时Minigun,该getRate()方法仍然从类返回常量Weapon,即使它是在Minigun类上调用的。我认为它会像Java一样,继承的方法将使用内部修改的变量Minigun。目前我必须做以下事情;

武器.h

#ifndef __WEAPON__
#define __WEAPON__

class Weapon
{
    public:
        virtual int getRate()
        {
            return rate;
        }
    private:
        const static int rate = 0;
};

#endif
Run Code Online (Sandbox Code Playgroud)

迷你枪.h

#include "Weapon.h"

#ifndef __WEAPON_MINIGUN__
#define __WEAPON_MINIGUN__

class Minigun: public Weapon
{
public: …
Run Code Online (Sandbox Code Playgroud)

c++ methods inheritance constants static-variables

5
推荐指数
1
解决办法
2万
查看次数

python 方法中的静态变量

在 Python 方法中,我希望有一个局部变量,其值在方法调用之间保持不变。

这个问题展示了如何在函数内声明此类“静态变量”(C++ 术语)。我尝试在实例方法中执行相同的操作,但失败了。

这是一个重现该问题的最小工作示例。您可以将其复制粘贴到解释器中。

class SomeClass(object):
    def some_method(self):
        if not hasattr(SomeClass.some_method, 'some_static_var'):
            SomeClass.some_method.some_static_var = 1  # breaks here

        for i in range(3):
            print SomeClass.some_method.some_static_var
            SomeClass.some_method.some_static_var += 1

if __name__ == '__main__':
    some_instance = SomeClass()
    some_instance.some_method()
Run Code Online (Sandbox Code Playgroud)

在标有“#在此中断”的行上,我得到:

AttributeError: 'instancemethod' object has no attribute 'some_static_var'

我意识到有一个简单的解决方法,我可以在其中创建 的some_static_var成员变量SomeClassSomeClass然而,该变量在方法之外确实没有用,所以如果可以的话,我更希望避免它弄乱命名空间。

python methods static static-variables

5
推荐指数
1
解决办法
9482
查看次数

C++静态变量初始化顺序

1)如果我没有弄错,C++标准保证单个翻译单元中的静态变量按其定义顺序初始化.我对以下代码片段感到困惑:

extern int n;
int k = n;
int n = 2;
Run Code Online (Sandbox Code Playgroud)

extern int n;是声明,而不是定义,所以k是之前定义的n,但是GCC,Clang和MSVC都告诉我k == 2全局变量初始化之后.对我来说,目前还不清楚如何k在之后分配2 int k = n;,因为n尚未在该点初始化,其值必须为零.

如果我们将最后一行更改为:

int n = func();
Run Code Online (Sandbox Code Playgroud)

哪里func()是非constexpr,然后k将被指定为零,正如我所期望的那样.那么,在编译时初始化全局变量会改变初始化的顺序吗?

2)这是另一个代码片段:

class Base
{
public:
    struct static_constructor
    {
        static_constructor()
        {
             i = 1;
        }
    };
    static static_constructor constructor;
    static int i;
};

Base::static_constructor Base::constructor;
int Base::i = 2;
Run Code Online (Sandbox Code Playgroud)

Base::constructor被定义,它的构造函数被调用,并i = 1进行分配.但是Base::i目前还没有定义,所以,请你解释一下此时发生了什么,为什么最后 …

c++ initialization global-variables static-variables static-members

5
推荐指数
1
解决办法
1659
查看次数

在覆盖派生类中的静态字段时,"...错误地扩展了基类静态端"错误

覆盖派生类中的静态字段会导致

错误TS2417:构建:类静态端'typeof TDerived'错误地扩展了基类静态端'typeof TBase'.

这是一个合法的错误案例吗?

class TBase
{
  private static s_field = 'something';

  public constructor() {}
}

class TDerived extends TBase
{
  private static s_field = 'something else'; // commenting this line fixes error

  public constructor()
  {
    super();
  }
}
Run Code Online (Sandbox Code Playgroud)

那我该怎么处理静态字段呢?现在唯一的解决方法是将类名添加到每个静态字段名称,这是一个非常难看的解决方案.

private static TBase_s_field = 'something';
...
private static TDerived_s_field = 'something else';
Run Code Online (Sandbox Code Playgroud)

ps使用typescript 2.0.3

inheritance static-variables typescript

5
推荐指数
1
解决办法
2237
查看次数

带有调试器的 kotlin 伴随对象字段

我在伴生对象中声明了一个字段,因此它将在伴生对象中的函数中知道。

像这样:

class ProgramStructure {
  companion object {
      var index = 0
      fun inc(){
          index++
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

一切正常,但是当我调试它时,我看不到“索引”的值。我怎样才能看到价值?

谢谢

debugging intellij-idea static-variables kotlin

5
推荐指数
1
解决办法
733
查看次数