You &quot;know the range&quot;, but not necessarily in terms of concrete numbers. Often, you iterate over variable size data structures, for example. All you know is that it won&#x27;t be larger than the C implementation it&#x27;s being compiled with allows--which usually roughly means that it won&#x27;t be larger than the amount of memory the processor it&#x27;s running on can address. But how much that actually is? Well, depends on the processor, and there also is no upper limit, as you always can invent a processor that can address more memory than any processor before. That&#x27;s why you should usually use appropriate abstract types (such as size_t in this case) that the compiler will make sure are large enough to be able to iterate over any data structure you will encounter on that target.