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

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

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