为什么我们不能决定让它非静态?是什么让我们这样做?
static int nLen = 0;
if (nLen)
{
nLen--;
if (rand() % 4 == 0)
{
float light = (float)rand()/(float)RAND_MAX;
if (rand() % 2 == 0)
{
Program.SendUniform("lightEmissive.color", 0.0, 0.0, 0.0);
Program.SendUniform("lightPoint.diffuse", 0.0, 0.0, 0.0);
}
else
{
Program.SendUniform("lightEmissive.color", 1.0 * light, 1.0 * light, 0.8 * light);
Program.SendUniform("lightPoint.diffuse", 0.15 * light, 0.15 * light, 0.15 * light);
}
}
}
else
{
Program.SendUniform("lightEmissive.color", 1.0, 1.0, 0.8);
Program.SendUniform("lightPoint.diffuse", 0.15, 0.15, 0.15);
if (rand() % 300 == 0)
nLen = rand() % 180;
}
答案 0 :(得分:2)
当static
用作函数中的限定符时,意味着变量将保持分配状态,并将其值从一个函数调用保留到下一个函数调用。换句话说,它具有全球生命周期。 (它仍然只在第一次调用函数时初始化。)
当static
用作全局变量的限定符时,表示该变量保留在当前编译单元(源文件)的内部。使用extern type name
的其他编译单元的名称无法访问此变量(尽管可以通过指针访问)。如果两个编译单元使用相同的静态全局变量,名称也不会冲突,程序将编译。
答案 1 :(得分:0)
旨在使变量仅对源文件可见。例如,您将无法在其他源文件中访问它。如果没有任何要求......你可以自由地使它成为非静态的。
答案 2 :(得分:0)
nLen是静态的,可以跳过第一次运行“if”块。每次调用方法时,本地nLen都会使“if”块运行。