Monic Polynomial wrote:
> On 02/06/2009, at 12:12, Martin Costabel wrote:
>> The most difficult thing was to find out how to print the value of a
>> macro at a given moment. From a diving expedition into the depths of  
>> the
>> docs, I brought home some macros that give the following small example
>> program in C:
>>
>> #include <stdio.h>
>> // stringify the value of a macro for printing
>> #define str(x) #x
>> #define xstr(x) str(x)
>> // play with replacing macros
>> #define OLD_DEBUG 1
>> #define DEBUG OLD_DEBUG
>> int main(){
>>         printf("Before: %s\n", xstr(DEBUG));
>> #undef OLD_DEBUG
>>         printf("After : %s\n", xstr(DEBUG));
>>         return(0);
>> }
>>
>> If you compile and run this, it prints
>>
>> costabel% ./a.out
>> Before: 1
>> After : OLD_DEBUG
>>
>> I don't know enough to say that there are no analogues of \edef or  
>> \let,
>> but I haven't come across them yet.
> 
> 
> Martin,
> 
> You may use GCC flags -E and -dD to achieve that in compile-time  
> rather than run-time. For example,
> 
> gcc -E -dD program.c -o program.e
> 
> outputs program.e, the post-processed version of program.c. -E tells  
> gcc to preprocess the file but not compile/build it, and -dD tells gcc  
> to output the values of macros.

Yes, this is true, and I used in fact the -E flag in order to find the 
origin of that bug. But in practice, this is rather useless if you want 
to know what the value of a certain macro is at a certain point in the 
program.

Consider the case where I replace in my little program above the line
#undef OLD_DEBUG
by
#include <QtGui/qmacdefines_mac.h>
(This gives the same effect).

Then the command `gcc -E -dD program.c -I/sw/lib/qt4-mac/include` spits 
out 1286 lines of code, and among these, the value of DEBUG is only 
visible because of the printf statements. If they weren't there, you 
would have no chance of seeing that DEBUG=1 before the call to 
#include<...> and DEBUG=OLD_DEBUG after that call.

What would be needed is a kind of gdb for the preprocessor stage, where 
you can single-step through the program and at each line ask for the 
values of all variables and macros. No idea if such a thing exists 
(maybe in xcode?).

-- 
Martin


-- 
Martin






------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises 
looking to deploy the next generation of Solaris that includes the latest 
innovations from Sun and the OpenSource community. Download a copy and 
enjoy capabilities such as Networking, Storage and Virtualization. 
Go to: http://p.sf.net/sfu/opensolaris-get
_______________________________________________
Fink-devel mailing list
Fink-devel@lists.sourceforge.net
http://news.gmane.org/gmane.os.apple.fink.devel

Reply via email to