Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

347
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda