Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

354
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!