我寫了一些硬件的特定代碼,在這裏我想用C宏的變量沒有,宏定義是這樣的: -論點C近拍
#define VALIDATE_RESOURCE_AND_ALLOCATE(MODE,RESOURCE1) if(a[MODE][RESOURCE1] != x1) || \
(a[MODE][RESOURCE1] != y1)) \
a[MODE][RESOURCE1]=x3;
因爲有時候我可以有更多的再1個資源分配,如: -
#define VALIDATE_RESOURCE_AND_ALLOCATE_1(MODE,RESOURCE1,RESOURCE2) if(a[MODE][RESOURCE1] != x1) || \ (a[MODE][RESOURCE1] != y1)) \ a[MODE][RESOURCE1]=x3; if(a[MODE][RESOURCE2] != x1) || \ (a[MODE][RESOURCE2] != y1)) \ a[MODE][RESOURCE2]=x3;
有什麼辦法,我可以寫一個宏,它涵蓋這兩種情況下,因爲它需要可變數目的參數?
我已經使用可變數量的參數,在宏的printf宏,但再怎麼我會解決這些爭論,由各自的名稱,例如,如果我修改宏定義,如:0-
#define VALIDA_RESOURCE_AND_ALLOCATE(MODE,.....)
我將如何識別RESOURCE1,RESOURCE2?
你「可以」但不要。你現在有什麼作品。我將重新定義第一個:#define VALIDATE_RESOURCE_AND_ALLOCATE_1(MODE,RESOURCE1,RESOURCE2)VALIDATE_RESOURCE_AND_ALLOCATE(MODE,RESOURCE1); VALIDATE_RESOURCE_AND_ALLOCATE(MODE,RESOURCE2)「,然後我將它們中的_both_包裝在'do {...} while(0)'中,這樣它們就像正確的語句一樣。 (此外,從來沒有你的宏用分號。) – 2012-02-16 16:16:25
但在這種情況下,如果假設第一個宏失敗,我想退出,這是不可能的,除非我檢查它的返回值... – Viks 2012-02-16 16:51:25
正如目前所寫,這些宏有任何返回值。 – 2012-02-16 17:05:02