There&#x27;s an added complication: in C, there are just five[1] names available for signed values: signed char, short, int, long, and long long. Additional, the number of bits assigned to each of those must be &gt;= to the previous name.<p>Suppose your C implementation wants to have signed types for 8-bit, 16-bit, and 32-bit values. If int is 64-bits, then you literally don&#x27;t have names left to label those lesser-sized signed types. So in practice, int can be no more than 32 bits.<p>The solution is to always use size_t as a count or size of anything. Uses offset_t for a difference between size_t values, or a difference between pointer values.<p>An alternate practice (one I subscribe to) is to use unsigned as your default type instead of int. In this practice, &#x27;int&#x27; means a variable which can be negative. In real programs, the vast majority of variables never contains negative values.<p>[1] char can be either signed or unsigned, so let&#x27;s ignore it for this. Also, let&#x27;s ignore the new char type names introduced in recent C++.