2011-04-18 25 views
-1

我想要做的事,如:如何「的#define」結構域或結構名

int desc = -1; 
    if (DB_DBM_HSEARCH == 1) { desc = db->fd } else desc = db->dbm_pagf; 

這是因爲編譯器錯誤的可能。

是否有可能做這樣的事情:

#define DESC db->fd  //and then 
    int desc = DESC; 

+1

兩個例子都缺少所需的';'。第一個例子,在「if」塊中。 'int desc = DESC'後面的第二個例子 – pickypg 2011-04-18 20:57:19

+1

我可以在你的代碼中看到丟失的分號,但沒有別的異常,編譯器不會接受。 – 2011-04-18 20:59:09

+0

「編譯器錯誤」? – 2011-04-18 21:17:02

回答

1

當然。雖然我認爲這將是一個更適合使用宏函數的方式(如果需要,可以更改變量名稱)。假設DB_DBM_HSEARCHis a macro

/* conditionally define the macros */ 
#if DB_DBM_HSEARCH == 1 
# define DESC(db) (db)->fd 
#else 
# define DESC(db) (db)->dbm_pagf 
#endif 

/* then to initialize */ 
int desc = DESC(db); 
1

你可以,但不要使用宏來處理這類事情,只需使用很好命名的變量即可。