2015-10-09 26 views
-3

你能幫我嗎?我厭倦了這個靜態int var ....這是我的功能。我希望它的值static int ban_ve在第一個函數acces 中爲0,並且我希望compteur在每次執行方法時增加它,以檢測程序是否訪問了兩次該過程。如何在C++函數中聲明並初始化一個靜態int?

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

:簡單地用'靜態INT ban_ve = 0;「我怎樣才能把它初始化爲0,只有第一個?」 ' – 101010

+0

'static int ban_ve = 0;'不適合你? –

回答

1

只要寫static int ban_ve = 0;

它保證ban_ve將只初始化一次。

6.7 $ 4.申報語句[stmt.dcl]:

具有靜態 存儲持續時間(3.7.1)或線程存儲時限(3.7所有塊範圍變量的零初始化(8.5)。 2)在執行任何其他初始化之前執行的是 。常量 具有靜態存儲的塊範圍實體的初始化(3.6.2) 持續時間(如果適用)在其塊首先輸入 之前執行。允許執行初始化其他塊範圍變量的靜態或線程 存儲持續時間在相同的條件下,允許在靜態或靜態初始化變量時使用靜態或線程 命名空間範圍(3.6。 2)。否則,這種變量 會在控件第一次通過聲明時被初始化; 這樣的變量在其初始化完成後被認爲是初始化的。如果通過拋出異常退出初始化, 的初始化沒有完成,所以它會再次嘗試下一個 時間控制進入聲明。如果控制在變量初始化時同時輸入聲明 ,則併發執行應等待初始化完成.93如果 控制器在初始化變量 時遞歸地重新輸入聲明,則行爲未定義。

1

聲明static int ban_ve作爲一個全局變量和增加它每次函數被調用:

static int ban_ve = 0; 
void iCol::attCalc() 
{ 
    ban_ve++; 
    //rest of code 
} 
相關問題