2014-02-26 21 views
0

我需要做同樣的事情在幾個陣列,不同類型的ÇC預處理保持多行

使用void *我寫了將接收所有類型的函數:

void 
floatarraymanip(void *inarray) 
{ 
    float *array=(float *)inarray; 

    [SEVERAL LINES OF OPERATIONS]------------- 
}           | 
              | 
void          | 
longarraymanip(void *inarray)    ----> Same 
{           | 
    long *array=(long *)inarray;    | 
              | 
    [SEVERAL LINES OF OPERATIONS]------------- 
} 

void 
arraymanip(void *array, char *arraytype) 
{ 
    if(strcmp(arraytype,"FLOAT")==0) 
    floatarraymanip(array); 
    if(strcmp(arraytype,"LONG")==0) 
    floatarraymanip(array); 
} 

[SEVERAL LINES OF OPERATIONS]是完全一樣的和相對較長(約50行)。我還需要爲其他幾種類型執行此操作,從而使我的源代碼的當前版本非常長!

所以我的問題是這樣的:有什麼辦法,我可以保持在預處理所有這些行一個命令,只是調用處理器變量在所有這些功能使程序變得更短,更具可讀性?

+0

簡單地將它們定義爲功能? – herohuyongtao

+0

預處理函數? – makhlaghi

+0

爲什麼不抽象掉'[操作幾行]',使之成爲功能。它將有助於調試,維護和保持代碼清潔。長功能宏很難維護。 – ajay

回答

5

可以做到全功能的宏是這樣的:

#define MACRO(X) { \ 
       first line command \ 
       second line command \ 
       third line \ 
       last line \ 
       } 

您還可以使用類型爲宏的一部分:

#define MACRO(TYPE,X) { \ 
       TYPE var = X; \ 
       first line command \ 
       second line command \ 
       third line \ 
       last line \ 
       } 

,並調用它像這樣:

MACRO(int, i) 
MACRO(int*, p) 
MACRO(float*, array) 

EDIT Better add {} ...

+0

您可以定義沒有參數的宏。但它看起來像是你想要的。 – SHR