Wednesday, January 9, 2013

How to inspect expanded C macros with gcc/gcc+

Sometimes you get compilation errors in gcc/g++ and you'd like to inspect the output from the C compiler pre-processor to figure out why certain macros were expanded in such as way to cause an error.
The solution is simply to remove the -o and -c options from your gcc/g++ command line and replace it with

gcc/g++ -E -dD

this will generate on your terminal only the C pre-processor output that is eventually fed to the C/C++ compiler.

For example you are trying to compile Mozilla SpiderMonkey 1.7 and one of  the compiler lines is the following:

/usr/bin/gcc  -Djs_1_7_EXPORTS -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DX86_LINUX -D_IEEE_LIBM -DJS_EDITLINE -DEDITLINE -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -DANSI_ARROWS -DHAVE_TCGETATTR -DHIDE -DUSE_DIRENT -DSYS_UNIX -DHAVE_STDLIB -DUNIQUE_HISTORY -O3 -DNDEBUG -fPIC -I../js-1.7  -fPIC -o CMakeFiles/js-1.7.dir/jsarena.c.o   -c js-1.7/jsarena.c

To see the expanded C macros run the following command:

 /usr/bin/gcc  -E -dD -Djs_1_7_EXPORTS -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DX86_LINUX -D_IEEE_LIBM -DJS_EDITLINE -DEDITLINE -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -DANSI_ARROWS -DHAVE_TCGETATTR -DHIDE -DUSE_DIRENT -DSYS_UNIX -DHAVE_STDLIB -DUNIQUE_HISTORY -O3 -DNDEBUG -fPIC -I../js-1.7  -fPIC  js-1.7/jsarena.c



4 comments:

  1. alt yapısını her geçen gün güçlendiren superbahis sitesinin vermiş olduğu çeşitli bonusları sizler için değerlendirdik. Kaçak bahis sitesi olan ve yurt dışında faaliyet gösteren superbahis üyelik için hemen tıklayın.

    ReplyDelete
  2. Curacao hükümetinin yetkilendirdiği Goldenbahis 8048 /JAZ lisans numarasına sahip olup teknik alt yapı şirketi Pronet Gaming ile beraber çalışır. E-oyun lisanslama işlemleri ve denetimi ise Antillephone N.V tarafından sağlanır. Goldenbahis güvenilir mi diye düşünenler lisans bilgilerini sorgulatabilir. Bunun için çeşitli casino siteleri veya kaçak bahis adresini kullanabilirsiniz.

    ReplyDelete