Ale ono to půjde i jinak:
unsigned long max = ULONG_MAX / 10;
int maxmod = ULONG_MAX % 10;
...
...
if (number > max || (number == max && cislice >= maxmod) printError(EBIG);
number = number * 10 + cislice;
V C nedělám, tak si kdyžtak uprav nedostatky.