variable tipo programming operator language functions declarar como and c language-lawyer declaration variable-declaration

programming - ¿Es largo un tipo largo en C?



variable size c (1)

Si lees los fragmentos correctos de la norma con suficiente atención, encontrarás que la declaración del monstruo en la pregunta es válida, aunque sea inverosímil.

Los ''bits correctos'' incluyen:

6.2.5 tipos

Hay cinco tipos enteros con signo estándar, designados como signed char , short int , int , long int y long long int . (Estos y otros tipos pueden designarse de varias maneras adicionales, como se describe en 6.7.2.)

...

Para cada uno de los tipos de enteros con signo, hay un tipo de entero sin signo correspondiente (pero diferente) (designado con la palabra clave unsigned ) que usa la misma cantidad de almacenamiento (incluida la información de signos) y tiene los mismos requisitos de alineación.

6.7.2 Especificadores de tipo

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.

...

  • long long , signed long long , long long int , o signed long long int
  • unsigned long long , o unsigned long long int

Otros especificadores de declaración incluyen clases de almacenamiento ( static y _Thread_local en el ejemplo), y calificadores de tipo ( volatile y _Atomic ).

6.7 Declaraciones

6.7 Declaraciones

Sintaxis

declaración:
declaración-especificadores init-declarator-listopt;
static_assert-declaraciones

declaración-especificadores:
especificador de clase de almacenamiento
declaración-especificadores optan
especificador de tipo declaración-especificador opt
especificadores de declaración de calificador de tipo optar
especificación de la función especificación de los especificadores opt
especificación de alineación especificación-especificadores optar

También, como lo señaló Olaf en un comment :

6.11.5 Especificadores de clase de almacenamiento

La colocación de un especificador de clase de almacenamiento que no sea al principio de los especificadores de declaración en una declaración es una característica obsoleta.

También es excéntrico dividir las palabras clave de tipo entero (el especificador de tipo). Una versión más ortodoxa de la declaración sería:

static _Thread_local _Atomic const volatile unsigned long long int x = 10;

(o podría caer el int ).

Sé que el título parece bastante estúpido, pero creo que vale la pena preguntar.

Tome esta declaración (o definición, tal vez) por ejemplo:

_Thread_local long volatile static int _Atomic const long unsigned x = 10;

Solía ​​considerar long long como tipo, pero si es un nombre de tipo, ¿cómo se pueden insertar tantos calificadores en él?

Así que consulté N1570 con esta pregunta, solo para estar más confundido. Menciona algunos términos como " especificador de tipo " y " calificador de tipo ", y no puedo encontrar long long en "especificadores de tipo", pero ¿no es un tipo primitivo en C? ¡Hay tantos libros que me lo dicen!

Aclarando no duplicar:

Sí, vi que una pregunta existente se relaciona con long int long , pero esta pregunta tiene algo que ver con los calificativos y está en C.