GNU cpp предоставляет директиву -dM, чтобы сделать именно это, вы можете перечислить все определения:
gcc -E -dM -c foo.c
Затем вы можете использовать скрипт sed, чтобы отменить их в командной строке :)
gcc -E -c foo.c |sed 's / # define / # undef /'
или делать что угодно ...
веселиться :)