“Длинно” все еще полезный в C?

  • Это не самый большой целый тип больше теперь, когда там "долго длинно".
  • Это не тип фиксированной ширины: это - 32 бита на некоторых платформах и 64 на других.
  • Это - не обязательно тот же размер как указатель (например, в 64-разрядном Windows)

Так, действительно "долго" больше имеет какое-либо значение? Существует ли когда-нибудь причина объявить длинное вместо ptrdiff_t или int64_t?

18
задан dan04 7 March 2010 в 22:29
поделиться

2 ответа

Есть небольшая разница между все еще полезным и чем-то, что вы должны использовать обычно . Тип long по-прежнему процветает, как заметил Крис Лутц , стоящий за многими типами, специфичными для системы и платформы (хотя обычно и без знака).

Когда вы знаете , что данные, с которыми вы будете работать, всегда будут соответствовать этому типу (лучше, если вы знаете подпись), особой причины нет. , а не , чтобы использовать его, особенно если у вас ограниченное пространство в структуре для работы.

Однако в большинстве случаев для будущих сопровождающих гораздо лучше использовать intxx_t или uintxx_t везде, где это возможно. Например, вы не знаете, что дата эпохи UNIX всегда будет помещаться в беззнаковое длинное число на 32-битных платформах (следовательно, time_t), если только у вас нет достоверных свидетельств того, что мир закончится раньше этого. переворачивается :)

5
ответ дан 30 November 2019 в 08:47
поделиться

Есть ли причина объявлять long вместо ptrdiff_t или int64_t?

В таких случаях никогда не было. Если вам нужна разница в указателях или конкретное 64-битное значение, вы должны использовать ptrdiff_t или int64_t . Вам никогда не следовало использовать long в первую очередь, за исключением, может быть, платформенно-зависимого typedef .

Вы должны использовать long , когда вам нужно как минимум 32-битное целое число, потому что int гарантированно будет иметь как минимум 16 бит. Если вам нужен собственный тип, но требуется как минимум 32-битное, используйте long . Если 16-битное ограничение приемлемо на некоторых старых платформах (это, вероятно, не имеет значения, и ваш код, вероятно, никогда не будет компилироваться), то это не имеет особого значения.

17
ответ дан 30 November 2019 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: