[C/C++] va_list的學習筆記

最近在看cocos2D裡面的code,尤其是CCMenu,因為我想要將一堆按鈕好好的排整齊,於是看到了裡面有個怪異的符號:va_list。

坦白說我跟C很不熟,我初學雖然有硬K過C,但那只限於書本,沒有實機操作。


通常我在建構CCMenu時,都是先把item建好,然後再用這些item去建立CCMenu物件:

CCMenu *menu = [CCMenu menuWithItems:ccmenuItem, nil];



可是仔細去看這個原始碼,裡面是這樣,我就在裡面直接說明:



+(id) menuWithItems: (CCMenuItem*) item, ...
{
    va_list args; //製作一個va_list物件,叫做args
    va_start(args,item);//從item開始,檢查到底有幾項參數
   
    id s = [[[self alloc] initWithItems: item vaList:args] autorelease];
   
    va_end(args); //結束
    return s;
}


所以va_list指的就是該方法所收到的參數表示的”...“。舉個例子:



CCMenu *menu = [CCMenu menuWithItems:item1, item2, item3, item4, item5, nil];

後面有五個item。

所以va_list args指的就是item2到item5。


換句話說,在表示該方法時所寫的:

 +(id) menuWithItems: (CCMenuItem*) item, ...

劃黃線表示的點點點,就是args所要表示的部分。

留言