Так, действительно "долго" больше имеет какое-либо значение? Существует ли когда-нибудь причина объявить длинное вместо ptrdiff_t или int64_t?
Есть небольшая разница между все еще полезным
и чем-то, что вы должны использовать обычно
. Тип long
по-прежнему процветает, как заметил Крис Лутц , стоящий за многими типами, специфичными для системы и платформы (хотя обычно и без знака).
Когда вы знаете , что данные, с которыми вы будете работать, всегда будут соответствовать этому типу (лучше, если вы знаете подпись), особой причины нет. , а не , чтобы использовать его, особенно если у вас ограниченное пространство в структуре для работы.
Однако в большинстве случаев для будущих сопровождающих гораздо лучше использовать intxx_t или uintxx_t везде, где это возможно. Например, вы не знаете, что дата эпохи UNIX всегда будет помещаться в беззнаковое длинное число на 32-битных платформах (следовательно, time_t), если только у вас нет достоверных свидетельств того, что мир закончится раньше этого. переворачивается :)
Есть ли причина объявлять long вместо ptrdiff_t или int64_t?
В таких случаях никогда не было. Если вам нужна разница в указателях или конкретное 64-битное значение, вы должны использовать ptrdiff_t
или int64_t
. Вам никогда не следовало использовать long
в первую очередь, за исключением, может быть, платформенно-зависимого typedef
.
Вы должны использовать long
, когда вам нужно как минимум 32-битное целое число, потому что int
гарантированно будет иметь как минимум 16 бит. Если вам нужен собственный тип, но требуется как минимум 32-битное, используйте long
. Если 16-битное ограничение приемлемо на некоторых старых платформах (это, вероятно, не имеет значения, и ваш код, вероятно, никогда не будет компилироваться), то это не имеет особого значения.