Incidentally if you try using those numeric constants directly in a C program, it fails to compile:
#include <stdio.h>
int main(void)
{
long x = 9223372036854775807;
long y = 9223372036854775808;
printf("x = %ld\n", x);
printf("y = %ld\n", y);
printf("x and y are %s\n", x == y ? "equal" : "not equal");
return 0;
}
The error message is:
gcc -c -Wall -Werror -ansi -O3 -fPIC src/test_num2.c -o obj/test_num2.o
src/test_num2.c: In function ‘main’:
src/test_num2.c:6:11: error: integer constant is so large that it is unsigned [-Werror]
src/test_num2.c:6:2: error: this decimal constant is unsigned only in ISO C90 [-Werror]
cc1: all warnings being treated as errors