So far I've got as far as:
#define ADEFINE "23" #pragma message ("ADEFINE" ADEFINE)
Which works, but what if ADEFINE isn't a string?
#define ADEFINE 23 #pragma message ("ADEFINE" ADEFINE)
causes:
warning: malformed ‘#pragma message’, ignored
Ideally I'd like to be able to deal with any value, including undefined.
To display macros which aren't strings, stringify the macro:
#define STRINGIFY(s) XSTRINGIFY(s) #define XSTRINGIFY(s) #s #define ADEFINE 23 #pragma message ("ADEFINE=" STRINGIFY(ADEFINE))
If you have/want boost, you can use boost stringize to do it for you:
#include <boost/preprocessor/stringize.hpp> #define ADEFINE 23 #pragma message ("ADEFINE=" BOOST_PP_STRINGIZE(ADEFINE))
I'm not sure if this will do what you want, but if you're only interested in this to debug the occasional macro problem (so it's not something you need displayed in a message for each compile), the following might work for you. Use gcc's -E -dD
option to dump #define
directives along with preprocessing output. Then pipe that through grep
to see only the lines you want:
// test.c #include <stdlib.h> #include <stdio.h> #define ADEFINE "23" #include <string.h> int main(int argc, char *argv[]) { #undef ADEFINE #define ADEFINE 42 return 0; }
The command gcc -E -dD -c test.c | grep ADEFINE
shows:
#define ADEFINE "23" #undef ADEFINE #define ADEFINE 42
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With