如何在c ++函数中声明和初始化静态int?

时间:2015-10-09 08:49:32

标签: c++ static

你能帮帮我吗?我厌倦了这个静态的int var ....这是我的功能。我希望它的值 static int ban_ve 在第一个函数访问中为0 并且我希望每次prog访问methode时,compteur都会增加它,以检测programm是否两次访问该过程。

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++;
}

2 个答案:

答案 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
}