void iCol::attCalc() //juste une fois cpt test
{
static int ban_ve; // how can I initialize it to 0 and only the first
if (ban_ve>0)
{
printf(" hello tu es dedans ....\n");
_getch();
exit(0);
}
attConD = OdemoConInfo(GetStdHandle(STD_OUTPUT_HANDLE)) ;
carConD = attConD % 16; // couleur de caractere par modulo carConD
bckConD = attConD - carConD;
bckConCH = bckConD / 16; // car hexa couleur de fond (ex F)
printf("attcalc attConD %d carConD %d bckConD %d bckConCH %d \n",attConD, carConD ,bckConD ,bckConCH );
ban_ve++;
}
答案 0 :(得分:1)
只需撰写static int ban_ve = 0;
保证ban_ve
只会被初始化一次。
6.7 $ 4声明声明[stmt.dcl]:
使用static的所有块范围变量的零初始化(8.5) 存储持续时间(3.7.1)或线程存储持续时间(3.7.2)是 在任何其他初始化发生之前执行。不变 具有静态存储的块范围实体的初始化(3.6.2) 持续时间(如果适用)在其块首次执行之前执行 进入。允许实现尽早执行 使用static或thread初始化其他块作用域变量 在与实现相同的条件下的存储持续时间 允许使用static或thread静态初始化变量 命名空间范围内的存储持续时间(3.6.2)。否则这样的变量 在控制第一次通过其声明时初始化; 这样的变量在完成后被认为是初始化的 初始化。如果通过抛出异常退出初始化, 初始化未完成,因此下次将再次尝试 时间控制进入声明。如果控制进入声明 在初始化变量的同时,并发 执行应等待初始化完成.93如果 控制在变量为的时候递归地重新输入声明 在被初始化时,行为是不确定的。
答案 1 :(得分:1)
将static int ban_ve
声明为全局变量,并在每次调用函数时递增它:
static int ban_ve = 0;
void iCol::attCalc()
{
ban_ve++;
//rest of code
}