I think i got it why GCC gives the warning with -std=C90. It basically wants to say: "Now that we are under the C90 rules, this literal is 'unsigned long', but under some newer standard it sould be 'signed long long', so make sure your code won't broke if you try to compile it under new standard". Now the only question that remains is: why there is no way to disable the warning?