Намерение и переносимость.
Например, допустим, у меня есть переменная unsinged n
.Целое число без знака может представлять многие вещи, поэтому его намерение неясно.Но когда я пишу size_t n
, становится ясно, что n
представляет размер чего-либо.Когда я пишу socklen_t n
, становится ясно, что n
представляет длину чего-либо, связанного с сокетом.
Вторая причина - это переносимость.Например, socklen_t
гарантированно будет не менее 32 бит.Теперь, если мы просто напишем unsigned n
, тогда размер n
может быть меньше 32 бит.size_t
может содержать размер любого объекта, но фактическое значение определяется реализацией.Когда мы используем простое целое число, может случиться так, что sizeof(int)
не сможет удержать размер самого большого объекта, который теоретически возможен.Но при использовании size_t
такой проблемы с переносимостью не возникает.
uint16_t
ясно говорит о том, что это целое число без знака из 16 битов, которое является одновременно ясным и переносимым, чем использование unsigned int
или unsigned short
.