Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

346
Vistas
¿Cómo usar la clase de almacenamiento de registro con typedef?

Quiero hacer esto:

 typedef register unsigned int _newint;

Básicamente, un alias conciso de register unsigned int as _newint .

Pero se produce un error, "no se puede especificar más de una clase de almacenamiento", subrayando el register .

Quiero saber si puedo hacer esto o no; ¿Si es así, entonces cómo?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Por extraño que parezca, la palabra clave typedef es en realidad un especificador de clase de almacenamiento (y, como indica el mensaje de error, no puede tener un segundo especificador de register en la misma instrucción). De este Proyecto de Norma C11 :

6.7.1 Especificadores de clase de almacenamiento

…
5 El especificador typedef se llama ''especificador de clase de almacenamiento'' solo por conveniencia sintáctica; se trata en 6.7.8. Los significados de los diversos enlaces y duraciones de almacenamiento se discutieron en 6.2.2 y 6.2.4.

Si, a pesar de la redacción del párrafo citado anteriormente, encuentra esto inconveniente , entonces considere por qué desea agregar un especificador de clase de almacenamiento a un typedef . Lo más probable es que el código sea más claro si agrega el especificador de register (o cualquier otro calificador) a las variables reales , cuando se declaran:

 typedef unsigned int _newint; void foo(void) { register _newint MyNewInt; //... }

'Ocultar' ese especificador de register en un alias puede causar problemas a los futuros lectores de su código, quienes luego no pueden entender por qué agregar un especificador diferente a una variable de ese tipo causa problemas.

over 4 years ago · Santiago Trujillo Denunciar

0

Quiero saber si puedo hacer esto o no, si es así, ¿cómo?

Tanto typedef como register cuentan como clases de almacenamiento, aunque eso es un tecnicismo en el caso de typedef . No puede declarar que ningún identificador tenga más de una clase de almacenamiento, por lo que la respuesta directa es no, no puede hacer eso.

Posiblemente podría usar una macro en lugar de un typedef para lograr un efecto similar:

 #define _newint register unsigned int void foo() { _newint x; }

Eso es engañoso, sin embargo, por lo que no debería.

De manera más general, probablemente no debería usar la clase de almacenamiento de register en absoluto. Los compiladores modernos no necesitan su ayuda para averiguar qué variables almacenar en los registros, y el register es solo una pista, por lo que el único efecto notable es que se le impide (por regla) tomar la dirección de un objeto declarado con ese almacenamiento clase.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda