我有一个像这样的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,没有其他功能或它们之间我更改其值。
答案 0 :(得分:6)
静态变量明显不全局。静态变量具有文件范围和内部链接,因此包含标头的每个文件都将获得自己的g_count
。如果你想要一个全局变量,只需在一个实现文件中写int g_count
并将extern int g_count
放在一个标题中,使用该全局变量的其他文件将被导入。