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

195
Vistas
¿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 Respuestas
Responde la pregunta

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 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