¿Es “largo” todavía útil en C?

  • Ya no es el tipo de entero más grande ahora que hay “long”.
  • No es un tipo de ancho fijo: tiene 32 bits en algunas plataformas y 64 en otras.
  • No es necesariamente del mismo tamaño que un puntero (por ejemplo, en Windows de 64 bits)

Entonces, ¿”long” ya tiene algún significado? ¿Hay alguna razón para declarar un largo en lugar de un ptrdiff_t o int64_t?

Hay una sutil diferencia entre lo que still useful y something you should habitually use . El tipo long aún prospera, como observó Chris Lutz detrás de muchos tipos específicos de sistemas y plataformas (aunque, por lo general, como sin firma).

Cuando sepa que los datos con los que trabajará siempre encajarán en ese tipo (de manera agradable, mejor si también conoce la firmeza), no hay ninguna razón particular para no usarlos, especialmente si tiene espacio limitado en una estructura para trabajar con.

Sin embargo, en la mayoría de los casos, por el bien de los futuros mantenedores, es mucho mejor usar intxx_t o uintxx_t siempre que sea posible. Por ejemplo, no sabe que una fecha de la época de UNIX siempre se ajustará dentro de una plataforma sin firmar de 32 bits (por lo tanto, time_t), a menos que tenga la autoridad suficiente de que el mundo terminará antes de que se desplace 🙂

¿Hay alguna razón para declarar un largo en lugar de un ptrdiff_t o int64_t?

Nunca hubo en esos casos. Si desea una diferencia de puntero, o un valor específico de 64 bits, debe utilizar ptrdiff_t o int64_t . En primer lugar, nunca debería haber estado usando long , excepto tal vez detrás de un typedef depende de la plataforma.

Debe usar long cuando necesite al menos un entero de 32 bits, porque int solo se garantiza que tenga al menos 16 bits. Si necesita un tipo nativo, pero necesita al menos 32 bits, use long . Si la limitación de 16 bits es aceptable en algunas plataformas antiguas (eso probablemente no importa y su código probablemente nunca se comstackrá), entonces no importa en particular.