120 votos

¿Cómo escribo una breve literal en C ?

Pregunta muy básica.. ¿cómo puedo escribir un short literal en C++?

Sé la siguiente:

  • 2 es int
  • 2L es long
  • 2LL es long long
  • 2.0f es float
  • 2.0 es double
  • '\2' es char.

Pero, ¿cómo iba yo a escribir un short literal? He intentado 2S pero que da una advertencia del compilador.

50voto

Ken Smith Puntos 192

C 11 te da bastante cerca de lo que deseas.

 #include <cstdint>

inline std::uint16_t operator "" _u(unsigned long long value)
{
    return static_cast<std::uint16_t>(value);
}

void func(std::uint32_t value); // 1
void func(std::uint16_t value); // 2

func(0x1234U); // calls 1
func(0x1234_u); // calls 2

// also
inline std::int16_t operator "" _s(unsigned long long value)
{
    return static_cast<std::int16_t>(value);
}
 

28voto

Michael Burr Puntos 181287

Incluso los escritores de la norma C99 quedó atrapado por esto. Este es un fragmento de Danny Smith dominio público stdint.h ejecución:

 /* 7.18.4.1  Macros for minimum-width integer constants

    Accoding to Douglas Gwyn <gwyn@arl.mil>:
    "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
    9899:1999 as initially published, the expansion was required
    to be an integer constant of precisely matching type, which
    is impossible to accomplish for the shorter types on most
    platforms, because C99 provides no standard way to designate
    an integer constant with width less than that of type int.
    TC1 changed this to require just an integer constant
    *expression* with *promoted* type."
*/
 

6voto

unwind Puntos 181987

Por lo que yo sé, no lo hace, no hay tal sufijo. La mayoría de los compiladores advierten si un literal entero es demasiado grande para caber en cualquier variable que se está tratando de almacenar en ella, sin embargo.

0voto

jsl4980 Puntos 451

Hice algunas búsquedas en google y encontré una buena referencia aquí

A partir de ese sitio un corto sin signo se puede hacer por L'ab' Uno o dos caracteres entre comillas simples ('), precedida por la letra L

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X