2013-10-23 43 views
2

最近,我正在閱讀GSM音頻編碼的源代碼。這些代碼是在1992年或以後編寫的。爲什麼主要P2((ac,av),int ac,char ** av)?

還有像一些奇怪的代碼:

main P2((ac, av), int ac, char ** av) 

void Gsm_Coder P8((S,s,LARc,Nc,bc,Mc,xmaxc,xMc) 

是那些代碼使用的舊方法? P2或P8的用途是什麼?

+0

我想'P2'和'P8'是宏。追蹤宏定義以找出他們在做什麼。 –

回答

1

這些是使代碼與舊式編譯器兼容的宏,這些編譯器列出括號後的類型。例如,P2可能會擴大到

main(int ac, char **av) 

main(ac,av) 
int ac; 
char **av; 

運行gcc -E看到預處理輸出。

28是因爲較舊編譯器中的預處理器宏不能包含可變數量的參數,所以您需要爲每個參數計數使用單獨的宏。