Доступ к значению определения макроса препроцессора

Если я добавлю макрос "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

Это выведет "бар"

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

Ответ 1

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

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

Ответ 2

NSLog(@"%s", #FOO);

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