From: Sergey Matveev Date: Mon, 4 Jul 2022 11:41:07 +0000 (+0300) Subject: Тип переменной индекса массива в Си X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=5f1645eb510d76ffb07c07fa09bffdea01959c03;p=stargrave-blog.git Тип переменной индекса массива в Си https://stackoverflow.com/questions/3174850/what-is-the-correct-type-for-array-indexes-in-c https://sergvasiliev.medium.com/about-size-t-and-ptrdiff-t-a1654234d842 Вот размеры и длины я привык (и считаю корректным) указывать в size_t. Но если хочется итерироваться по массиву, указывать элемент в нём, то какой тип применять для переменной содержащей индекс? size_t плох тем, что он беззнаковый, так что при логической ошибке или переполнении его значение может стать огромным из-за переполнения и оно уйдёт в бесконечный цикл например. Подобное отлаживать не очень приятно. А я уже не раз напарывался на подобную ошибку. Хочется использовать число со знаком. int может быть слишком маленьким. ssize_t определён только в POSIX и гарантирует только [-1, SSIZE_MAX]. Куча людей указывается на ptrdiff_t. Но и он может, очевидно, быть меньше size_t. Посмотрел код всяких других проектов серьёзных, типа Redis. Они все size_t используют. И пока я тоже остаюсь на нём, не забывая про косяки неприятные во время разработки. ---