Как "#define" struct field или struct name - PullRequest
0 голосов
/ 19 апреля 2011

Я хочу сделать что-то вроде:

    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;

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

Конечно. Хотя я думаю, что это было бы более подходящим способом сделать это с помощью макрофункций (так что вы можете изменить имена переменных, если вам нужно). Предполагая, что DB_DBM_HSEARCH является макросом :

/* 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 голос
/ 19 апреля 2011

Вы можете, но не использовать макросы для такого рода вещей, просто используйте переменные с красивыми именами.

...