[Resuelto] Evitar avisos Code::Block

Iniciado por CSQCasimiro, 9 Septiembre 2012, 01:20 AM

0 Miembros y 1 Visitante están viendo este tema.

CSQCasimiro

hola como andan? espero que bien, yo de nuevo por acá jeje, tengo una duda con la instancia de compilación que realiza el IDE Code::Block... es posible evitar que me marque algunos avisos ? por que tengo una función que uso mucho pero por no ser muy linda a la vista del Sr.GCC siempre me tira avisos sobre la misma :P y... ya es molesto >.<

si alguien conoce un método para evitar esos avisos le agradeceré mucho :D

desde ya muchas gracias. y buena suerte.
"Mejora el Algoritmo, no el Código"
"Buscando todos los días ser mejor que ayer"

avesudra

#1
Pon la función aquí a ver si podemos solucionar lo del aviso , de momento , en el nombre del proyecto que sale a la izquierda de la interfaz donde salen los archivos clicas y le das a Properties , después a Project Build Options (encima del OK) , y desactivas la cuarta opción : Enable all computer warnings... blablabla  :D Algunas cosas que no son buenas y pueden dar error casi seguro si las dice eh. Y si no quieres que te salga ningún aviso en ningún proyecto , te vas a Settings -> Compiler and Debugger y activas la sexta opción : Inhibit all warning messages[-w] o suspender todos los mensajes de aviso.

¡Un saludo y postea esa función!
Regístrate en

CSQCasimiro

#2
gracias, era eso :D, lo de la función es lo de menos ,el aviso era por que mandaba un parámetro sin inicializar , pero no hacia falta por que lo sobrescribía mas tarde con malloc... muchas gracias :D

solo si alguien le sirve en algún futuro... le paso la función, crea un vector que contiene toda la información de un archivo usando malloc, solo le indicas la ruta del archivo, un puntero a la estructura a usar, y el tamaño de la estruc (sizeof)

Código (c++) [Seleccionar]


void* Carga_enMalloc(const char* ruta, void* registro, size_t tam)
{
   int cant;
   FILE *f;
   f=fopen(ruta,"rb");
   error_archivo("\t ERROR: no se pudo abrir el archivo - T x 69", &f);

   cant=Cant_registros(ruta, tam);

   registro = malloc(cant*tam);

   fread(registro, tam, cant, f);

   fclose(f);

   return registro;
}


lo del aviso, se por que se genera, y que el return de la funcion esta de mas, pero cuando ya tenia el programa avansado al notarlo, no tuve ganas de cambiarlo (soy vago -_-)
"Mejora el Algoritmo, no el Código"
"Buscando todos los días ser mejor que ayer"

Foxy Rider

#3
[alex@Sylbit Samples]$ clang test.c
test.c:11:5: warning: implicit declaration of function 'error_archivo' is invalid in C99 [-Wimplicit-function-declaration]
   error_archivo("\t ERROR: no se pudo abrir el archivo - T x 69", &f);
   ^
test.c:13:10: warning: implicit declaration of function 'Cant_registros' is invalid in C99 [-Wimplicit-function-declaration]
   cant=Cant_registros(ruta, tam);
        ^
2 warnings generated.
/tmp/test-pRTIEG.o:test.c:function Carga_enMalloc: error: undefined reference to 'error_archivo'
/tmp/test-pRTIEG.o:test.c:function Carga_enMalloc: error: undefined reference to 'Cant_registros'
clang: error: linker command failed with exit code 1 (use -v to see invocati


1) error_archivo() y cant_registros() que onda? faltan
2) La funcion la reescribiria, la veo muy mal ...pero como falta codigo hay posibilidad de que lo que yo crea erroneo, no lo sea, doy beneficio a duda ... por lo pronto noto algo sospechoso aca:

error_archivo("\t ERROR: no se pudo abrir el archivo - T x 69", &f);

f ya es puntero (FILE*), al agregarle el operador & estas pasandolo a puntero a puntero (FILE**), lo cual no creo que sea tu intencion.




Citarno ser muy linda a la vista del Sr.GCC siempre me tira avisos sobre la misma :P y... ya es molesto >.<

El Sr. GCC compila lo que tiene que compilar, y si hay código que formalmente (en lo "estándar") es válido, pero en runtime u otro tipo de circunstancias causa problemas o es mala práctica ... tiene que avisartelo.
No tiene nada que ver con que sea "lindo" o "no" (ojalá lo hiciese, ojalá)

El problema no lo tiene GCC, lo tiene usted ... dicho en pocas palabras y con poca delicadeza

Saludos.

P.S → Rara vez los warnings ("avisos") los emite el compilador por que le parece ... usualmente es por que estas haciendo algo MAL, y el compilador te informa (o sea, es codigo legitimo, pero erroneo)

rir3760

Cita de: CSQCasimiro en  9 Septiembre 2012, 03:23 AMgracias, era eso :D, lo de la función es lo de menos ,el aviso era por que mandaba un parámetro sin inicializar , pero no hacia falta por que lo sobrescribía mas tarde con malloc
Lo primero que haces con "registro" es asignarle un valor, por ello no debería ser un parámetro sino una variable local.

Si apenas empiezas lo mejor es utilizar el compilador en el modo mas estricto posible.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

xiruko

CitarLo primero que haces con "registro" es asignarle un valor, por ello no debería ser un parámetro sino una variable local.
supongo que declarara la variable en el main y en esta funcion ya lo hace todo, la inicializa con malloc y luego la carga de datos, para devolver el puntero con todo ya hecho.

un saludo!

CSQCasimiro

Cita de: xiruko en 10 Septiembre 2012, 03:06 AM
supongo que declarara la variable en el main y en esta funcion ya lo hace todo, la inicializa con malloc y luego la carga de datos, para devolver el puntero con todo ya hecho.

un saludo!

exacto ! , por eso decía que la función era lo de menos, por que no quería que se rompan el coco entendiéndola ajaj
el aviso lo genera por que recibe una variable puntero con basura y al detectar que realizan operaciones sobre ella salta el warning, pero como me es indistinto por que la sobre escribe usando malloc, ese aviso esta de mas y era molesto jaaj
"Mejora el Algoritmo, no el Código"
"Buscando todos los días ser mejor que ayer"

xiruko

Citarel aviso lo genera por que recibe una variable puntero con basura

eso tiene facil solucion:

FILE *f=NULL;

un saludo!

CSQCasimiro

Cita de: xiruko en 10 Septiembre 2012, 21:28 PM
eso tiene facil solucion:

FILE *f=NULL;

un saludo!

casi pero no, el FILE *f es local a la función conflictiva, en todo caso deberia ser =NULL el puntero a que manda al compo bufer de la función, no se molesten mas en seguir contestando, se lo agradezco de verdad la ayuda que dan, pero no les quiero sacar mas el tiempo en algo que ya solucione :$

el viernes les subo el soft completo que no es mas que uno para practicar menues, malloc, estructuras y ABM de un archivo, para que de esa manera si alguien en algún futuro busca códigos de ejemplo de eso lo encuentre :P
"Mejora el Algoritmo, no el Código"
"Buscando todos los días ser mejor que ayer"

xiruko

perdona me confundi con lo de antes, me referia a:

char *registro=NULL

en el main. aprovecho para decirte que no se por que haces que registro sea un puntero a void cuando esta apuntando a una cadena de caracteres. quizas algun warning era por eso... ni idea la verdad sin ver el code entero.

en fin solo queria aclarar lo de antes :silbar:

un saludo!