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

130
Visualizações
En C, ¿cuándo puede devolver `fputc` que no sea su primer argumento?

El estándar C17 (N2176) establece: "La función fputc devuelve el carácter escrito" (7.21.7.3) si no hay error de escritura.

Pero en el contexto de

 int c ; // ... later, c is assigned an "interesting" value ... int k = fputc ( c , stdout ) ;

es

 k == c || k == EOF

siempre true ? Es decir, siempre que fputc no devuelva EOF , ¿está garantizado que devolverá c ? Dicho de una tercera manera, ¿ fputc puede escribir un carácter diferente a uno igual a su primer argumento?

Por ejemplo, si solicito la salida del signo de dólar (no se garantiza que esté en los juegos de caracteres fuente o de ejecución, AFAICT), podría '\u0024' != fputc('\u0024', stdout) . Tal vez el programa genere un símbolo de moneda local, en su lugar.

Aclaración

La pregunta es

En C, ¿cuándo puede fputc devolver algo que no sea su primer argumento?

Las respuestas parciales hasta ahora (2021-10-20) parecen ser:

  • cuando ocurre un error de escritura durante fputc ,
  • cuando (unsigned char) c != c

todavía me pregunto

Supongamos que (unsigned char) c == c , pero (unsigned char) c no coincide con un carácter en el conjunto de caracteres de ejecución. ¿Se le permite a fputc escribir algún otro carácter en su lugar?

Por ejemplo , suponga que c == (unsigned char) '\u0024' (signo de dólar ASCII) no existe en el conjunto de caracteres de ejecución (porque el conjunto de caracteres de ejecución no es ASCII). ¿Puede fputc escribir, por ejemplo, otro símbolo de moneda en su lugar (o algún carácter arbitrario)?

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

0

es k == c || k == EOF siempre es cierto?

Normalmente sí, pero no.

Con fputc ( c , stdout ) , c se convierte en un unsigned char y eso se escribe. Es ese valor o EOF que se devuelve.

En su lugar, espere k == (unsigned char) c || k == EOF .

La función fputc escribe el carácter especificado por c (convertido en un unsigned char ) en el flujo de salida...
Devoluciones: La función fputc devuelve el carácter escrito. Si ocurre un error de escritura, se establece el indicador de error para la secuencia y fputc devuelve EOF . C17dr § 7.21.7.3 2-3


Un ejemplo algo no tan raro es cuando ch se asigna desde un char que está firmado y con un valor inferior a 0. Se espera que el valor de retorno de la función sea [0...UCHAR_MAX] o EOF .

Ejemplo

 char ch = -96; printf("%d %d %d\n", SCHAR_MIN, ch, fputc(ch, stdout));

Producción

 �-128 -96 160

Tal vez el programa genere un símbolo de moneda local, en su lugar.

Con fputc('\u0024', stdout) , igual que fputc(0x24, stdout) y fputc(36, stdout) , el símbolo que se ve es específico de la implementación. C no especifica que se use ASCII, incluso si es omnipresente. C no especifica la fuente ni las formas de las representaciones de caracteres. Aún así, probablemente será $ .

over 4 years ago · Santiago Trujillo Relatório

0

Sí, fputc siempre devuelve EOF o el carácter escrito.

Según la página de cppreference.com en fputc :

Valor de retorno
En caso de éxito, devuelve el carácter escrito.
En caso de falla, devuelve EOF y establece el indicador de error (ver ferror() ) en la transmisión.

Y del estándar C17 (7.21.7.3/2-3, N2310 ):

  1. Descripción
    La función fputc escribe el carácter especificado por c (convertido en un unsigned char ) en el flujo de salida al que apunta flujo...

  2. Devoluciones
    La función fputc devuelve el carácter escrito. Si ocurre un error de escritura, se establece el indicador de error para la secuencia y fputc devuelve EOF .

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