Iphone Objective-c全局变量值不同

1 c iphone cocoa-touch objective-c

我有一个像这样的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
Run Code Online (Sandbox Code Playgroud)

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

...
#include "Renderer.h"

@implementation Sprite
...
-(void)draw:(float)dt {
    ...
    g_addVertex(...); //6 times
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Chu*_*uck 6

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