Доступ к значению определения макроса препроцессора - PullRequest
14 голосов
/ 16 июля 2010

Если я добавлю макрос "FOO = bar" в GCC_PREPROCESSOR_DEFINITIONS (или макросах препроцессора, если вы используете XCode "), каков будет лучший способ получить доступ к значению" FOO "?

В настоящее время яиспользуйте неуклюжий:

    #define MACRO_NAME(f) #f
    #define MACRO_VALUE(f)  MACRO_NAME(f)

    #ifdef FOO
        NSLog(@"%s", MACRO_VALUE(FOO));
    #else
        NSLog(@"undefined");
    #endif

Это выведет "bar"

Конечно, должен быть лучший / более чистый способ?

Ответы [ 2 ]

10 голосов
/ 16 июля 2010

То, что вы делаете, это способ до stringize (или stringify ) значений макросов.Непосредственное отклонение неизбежно.

Это даже упоминается в препроцессоре GCC ручной раздел , с которым Роб связался.

2 голосов
/ 16 июля 2010
NSLog(@"%s", #FOO);

См. Стрификация .Это техника, которую вы уже используете.Что с ним не так?

...