c

¿Es largo un tipo de datos o calificador en C?



(3)

Estoy leyendo Programming in C by Stephan G. Kochan . Afirma que C tiene solo cinco tipos de datos; int , float , double , char y _Bool .

¿Qué hay de long ? ¿No es un tipo incorporado? http://www.programiz.com/c-programming/c-data-types dice que long es un calificador para modificar el tamaño. Si es un calificador, entonces solo debe usarse como un long int , y no como un long independiente.

¿Y qué hay de _Bool ? Muchos tutoriales de Internet dicen que no hay un tipo booleano en C.

Relacionado:


Afirma que C tiene solo cinco tipos de datos; int, float, double, char y _Bool.

Eso es una simplificación excesiva. Tal vez intencional, si el libro está dirigido a principiantes.

Si pasa por C11 6.2.5, enumera los siguientes tipos de datos distintos:

Tipos de personajes (6.2.5 / 15)

char signed char unsigned char

Tipos enteros con signo estándar (6.2.5 / 4)

signed char short int int long int long long int

Tipos enteros sin signo estándar (6.2.5 / 5)

_Bool unsigned char unsigned short int unsigned int unsigned long int unsigned long long int

Tipos flotantes reales (6.2.5 / 10)

float double long double

Tipos complejos (6.2.5 / 11)

float _Complex double _Complex long double _Complex

Tipo enumerado (6.2.5 / 16)

enum {}

tipo vacío (6.2.5 / 19) (el tipo vacío es un tipo incompleto)

void

Tipos derivados (6.2.5 / 20)

  • Tipo de matriz
  • Tipo de estructura
  • Tipo de union
  • Tipo de función
  • Tipo de puntero
  • Tipo atómico

Formalmente el término es especificador de tipo 6.7.2:

type-specifier: void char short int long float double signed unsigned _Bool _Complex atomic-type-specifier struct-or-union-specifier enum-specifier typedef-name

Al menos un especificador de tipo se dará en los especificadores de declaración en cada declaración, y en la lista de calificador-especificador en cada declaración de estructura y nombre de tipo. Cada lista de especificadores de tipo debe ser uno de los siguientes conjuntos múltiples (delimitado por comas, cuando hay más de un conjunto múltiple por elemento); los especificadores de tipo pueden aparecer en cualquier orden, posiblemente entremezclados con los otros especificadores de declaración.
- vacío
- char
- firmado char
- Sin firmar
- corto, firmado corto, corto int, o firmado corto int
- sin signo corto, o sin signo int corto
- int, firmado o firmado int
- unsigned, o unsigned int
- largo, firmado largo, largo int, o firmado largo int
- sin firma larga, o sin firma larga int
- largo largo, firmado largo largo, largo largo int, o firmado largo largo int
- sin firmar long long, o unsigned long long int
- flotar
- doble
- doble largo
- _Bool
- flotar _Complejo
- Doble _Complex
- largo doble _Complex
- Especificador de tipo atómico
- Especificador de estructura o unión
- especificador de enumeración
- nombre de typedef

Como podemos ver, long es un especificador de tipo. No es un calificador de tipo.


Del borrador C11, sección 6.2.5 ("Tipos)" párrafo 4:

Hay cinco tipos enteros con signo estándar, designados como signed char , short int , int , long int y long long int .

La forma en que se especifican estos tipos en el texto del programa es otro problema, hay muchas maneras, ya que la sintaxis es más bien laxa. Por ejemplo, de acuerdo con 6.7.2 ("Especificadores de tipo"), las siguientes son formas válidas de especificar el mismo tipo :

long , signed long , long int , o signed long int

Esto dice que long por sí mismo es un especificador de tipo válido para el tipo long int . Esto era lo mismo en C99 (y, supongo , también en estándares anteriores). Así que no, no es un calificativo.

Además, lo anterior se puede mezclar con elementos como asteriscos de puntero static , volatile , etc., etc.

Sugeriría leer otro libro, ya que es confuso leer libros que usan una terminología diferente de la estándar. Cuando se responde a las preguntas sobre C, a menudo se hace referencia al estándar, por lo que es una buena idea estar familiarizado con él.


En el lenguaje de programación C, los tipos de datos son declaraciones para ubicaciones de memoria o variables que determinan las características de los datos que pueden almacenarse y los métodos (operaciones) de procesamiento que están permitidos para involucrarlos.

El lenguaje C proporciona tipos aritméticos básicos, como los tipos de números enteros y reales, y la sintaxis para crear tipos de matriz y compuestos. Varios encabezados en la biblioteca estándar de C contienen definiciones de tipos de soporte, que tienen propiedades adicionales, como proporcionar almacenamiento con un tamaño exacto, independientemente de la implementación. https://wikipedia.org/wiki/C_data_types