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

202
Visualizações
¿Puede una implementación que tiene sizeof (int) == 1 "completamente conforme"?

De acuerdo con el estándar C , todos los caracteres devueltos por fgetc se devuelven en forma de valores de caracteres unsigned char , "convertidos en un int " (esa cita proviene del estándar C, que indica que, de hecho, hay una conversión).

Cuando sizeof (int) == 1 , muchos valores de unsigned char están fuera del rango. Por lo tanto, es posible que algunos de esos valores de unsigned char terminen convirtiéndose en un valor int (el resultado de la conversión es "definido por la implementación o se genera una señal definida por la implementación" ) de EOF , que se devolvería a pesar de la el archivo no se encuentra realmente en un estado erróneo o de fin de archivo.

Me sorprendió descubrir que tal implementación realmente existe. El manual TMS320C55x CCS documenta UCHAR_MAX con un valor correspondiente de 65535, INT_MAX con 32767, fputs y fopen compatibles con el modo binario... Lo que es aún más sorprendente es que parece describir el entorno como una implementación completa y totalmente conforme (señales negativas).

El compilador C55x C/C++ cumple totalmente con el estándar ISO C según lo definido por la especificación ISO...

Las herramientas del compilador vienen con una biblioteca de tiempo de ejecución completa. Todas las funciones de biblioteca se ajustan al estándar de biblioteca ISO C. ...

¿Una implementación de este tipo que puede devolver un valor que indica errores donde no los hay, es realmente completamente conforme? ¿Podría esto justificar el uso feof y ferror en la sección de condición de un bucle (por horrible que parezca)? Por ejemplo, while ((c = fgetc(stdin)) != EOF || !(feof(stdin) || ferror(stdin))) { ... }

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La función fgetc() devuelve un valor int en el rango de caracteres unsigned char solo cuando se lee un carácter adecuado; de lo contrario, devuelve EOF , que es un valor negativo de tipo int .

Mi respuesta original (la cambié) suponía que había una conversión de enteros a int , pero este no es el caso, ya que en realidad la función fgetc() ya está devolviendo un valor de tipo int .

Creo que, para estar conforme, la implementación debe hacer que fgetc() devuelva valores no negativos en el rango de int , a menos que se devuelva EOF .

De esta forma, el rango de valores de 32768 a 65535 nunca estará asociado a códigos de caracteres en la implementación TMS320C55x.

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