Iphone Objective-c全局变量值不同

时间:2010-12-27 21:18:33

标签: iphone objective-c c cocoa-touch

我有一个像这样的C头文件:

#ifndef RENDERER_H
#define RENDERER_H
static int g_count = 0;
static inline void g_addVertex(...) {
    ...
    g_count++;
}
static inline void g_flush() {
    ...
    g_count = 0;
}
#endif

我有一个像这样的Objective-C类:

...
#include "Renderer.h"

@implementation Sprite
...
-(void)draw:(float)dt {
    ...
    g_addVertex(...); //6 times
}

在ES1Renderer.m的iOS OpenGL模板中,我创建了一个Sprite实例。在ES1Renderer中的render方法中,我调用了这个实例的draw方法,并且g_count变量在draw方法中正常计数。(在draw中六个g_addVertex(...)函数调用后它的值为6)

但是在我调用ES1Renderer的render方法中的g_flush()函数之后,在调用Sprite实例draw方法之后,在g_flush()中,g_count变量的值为0。 它应该是例如在Sprite类的draw方法中六个g_addVertex()之后的6。

请帮助我,我不知道为什么g_count更改为0,没有其他功能或它们之间我更改其值。

1 个答案:

答案 0 :(得分:6)

静态变量明显全局。静态变量具有文件范围内部链接,因此包含标头的每个文件都将获得自己的g_count。如果你想要一个全局变量,只需在一个实现文件中写int g_count并将extern int g_count放在一个标题中,使用该全局变量的其他文件将被导入。