http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59495
--- Comment #3 from Doron Tsur <doront at mellanox dot com> --- It is probably a false positive bug - warning is undetected. Consider the following code: $ cat define_compare_test.c #include "define_compare_test.h" #include <stdio.h> int main(int argc __attribute__((unused)), char** argv __attribute__((unused))) { const int number_int = -1; const unsigned int number_unsigned_int = 0xFFFFFFFF; printf("%d and %u are %s\n", number_int, number_unsigned_int, DEFINE_COMPARE(number_int, number_unsigned_int) ); return 0; } $ cat define_compare_test/define_compare_test.h #define DEFINE_COMPARE(X,Y) \ ((X)==(Y)) ? "equal" : "different" $ ... cp -v define_compare_test/define_compare_test.h /usr/include 'define_compare_test/define_compare_test.h' -> '/usr/include/define_compare_test.h' $ gcc -Wall -Wextra -Werror define_compare_test.c -I define_compare_test -H . define_compare_test/define_compare_test.h ... In file included from define_compare_test.c:1:0: define_compare_test.c: In function 'main': define_compare_test/define_compare_test.h:3:7: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare] ((X)==(Y)) ? "equal" : "different" ^ define_compare_test.c:9:9: note: in expansion of macro 'DEFINE_COMPARE' DEFINE_COMPARE(number_int, number_unsigned_int) ); ^ Multiple include guards may be useful for: /usr/include/wchar.h ... /usr/include/x86_64-linux-gnu/gnu/stubs.h define_compare_test/define_compare_test.h cc1: all warnings being treated as errors $ gcc -Wall -Wextra -Werror define_compare_test.c -H . /usr/include/define_compare_test.h . /usr/include/stdio.h ... Multiple include guards may be useful for: /usr/include/define_compare_test.h /usr/include/wchar.h ... $ ./a.out -1 and 4294967295 are equal