The C89 code relies on printing size_t as unsigned long, because a dedicated printf format specifier string wasn't introduced yet. This works with the assumption that size_t fits in an unsigned long, which is probably always true in C89. A compile-time assertion wouldn't hurt though.
Relevant discussion: https://stackoverflow.com/questions/47556181/is-it-safe-to-cast-size-t-to-unsigned-long-int
The C89 code relies on printing
size_tasunsigned long, because a dedicated printf format specifier string wasn't introduced yet. This works with the assumption thatsize_tfits in anunsigned long, which is probably always true in C89. A compile-time assertion wouldn't hurt though.Relevant discussion: https://stackoverflow.com/questions/47556181/is-it-safe-to-cast-size-t-to-unsigned-long-int