https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62228
--- Comment #2 from Ankzz <ankzzdev at gmail dot com> --- Why do you think its not a bug? It would be better if you can explain me the reason why level should be replaced with a "0". In the same macro if I replace "level" with "_level", #define LOG(module, level, msg) \ if ( (module)->_level ) \ msg_log(msg) I get the pre-processed code as : if ( (&module)->_level ) msg_log("Ooops\n");