¿Por qué recibo esta advertencia en “if (fd=fopen(fileName,”r”) == NULL)”?
⏰ 1 minuto de lectura
FILE *fd;
if (fd=fopen(fileName,"r") == NULL)
{
printf("File failed to open");
exit(1);
}
Este es un fragmento de código. Cuando lo compilo con gcc, recibo la siguiente advertencia: –
warning: assignment makes pointer from integer without a cast
cuando pongo fd=fopen(argv[2],”r”) entre paréntesis, el problema se resuelve ..
no soy capaz de entender ¿Dónde estoy convirtiendo un entero en un puntero? cuando no se ponen los corchetes.
Debido a las reglas de precedencia de operadores, la condición se interpreta como fd=(fopen(fileName,"r") == NULL). El resultado de == es entero, fd es un puntero, por lo tanto, el mensaje de error.
Considere la versión “extendida” de su código:
FILE *fd;
int ok;
fd = fopen(fileName, "r");
ok = fd == NULL;
// ...
¿Esperaría que la última línea se interpretara como (ok = fd) == NULLo ok = (fd == NULL)?
Esta respuesta en realidad explica la advertencia.
–Richard Pennington
22 de enero de 2010 a las 14:11
La precedencia del operador de igualdad es mayor que la del operador de asignación. Solo cambia tu código a:
FILE *fd;
if ((fd=fopen(fileName,"r")) == NULL)
{
printf("File failed to open");
exit(1);
}
== tiene mayor precedencia que =por lo que compara el resultado de fopen() para NULLluego asigna eso a fd.
Necesita paréntesis alrededor de la tarea:
if ((fd=fopen(fileName,"r")) == NULL)
....
== tiene una prioridad más alta que =.
tim cooper
¿Has hecho lo siguiente?
#include <stdio.h>
Sin esto, el compilador asume que todas las funciones devuelven un int.
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información