Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing the value of a Preprocessor Macro definition

If I add a macro "FOO=bar" under GCC_PREPROCESSOR_DEFINITIONS (or Preprocessor Macros if you use XCode"), what would be the best way to access the value of "FOO"?

Currently, I use the clumsy:

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

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

This will output "bar"

Surely, there must be a better/cleaner way?

like image 700
Adriaan Tijsseling Avatar asked Jul 16 '10 03:07

Adriaan Tijsseling


2 Answers

What you are doing is the way to stringize (or stringify) macro values. The indirection is unavoidable.

This is mentioned in the GCC preprocessor manual section (archived link) that Rob linked to:

 #define xstr(s) str(s)
 #define str(s) #s
 #define foo 4
 str (foo)
      ==> "foo"
 xstr (foo)
      ==> xstr (4)
      ==> str (4)
      ==> "4
like image 50
Georg Fritzsche Avatar answered Oct 20 '22 02:10

Georg Fritzsche


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

See Stringification. It's the technique you're already using. What was wrong with it?

like image 39
Rob Napier Avatar answered Oct 20 '22 03:10

Rob Napier