PDA

Visualizza la versione completa : [C / VS C++ 2008] Warning funzione non definita


mciasco
14-12-2009, 13:17
Salve,

sto usando Visual Studio 2008 C++ Express per un progetto in C. Come sono solito fare ho diviso i sorgenti in moduli .c e .h.
Fino ad oggi tutto ok, nessun problema particolare. Poi all'improvviso mi trovo in questa situazione:

In un modulo "info_table.c" devo richiamare una funzione il cui corpo e' definito in "info_key.c" e il prototipo e' quindi dichiarato in "info_key.h". Quindi cosa faccio, beh semplicemente aggiungo una "#include <info_key.h>" in "info_table.c", no?!? Beh magia, il compilatore mi dice che la funzione che voglio chiamare non e' definita e che verra' intesa come funzione esterna che ritorna un int (warning C4013).

La prima cosa assurda e' appunto che il sorgente info_table.c, nonostante la include di info_key.h, non trovi la definizione della funzione che voglio utilizzare.

La seconda cosa magnifica e' che in info_key.c e info_key.h sono definite diverse altre funzioni oltre a quella in questione. Cosi' ho provato ad usare una di queste altre funzioni e, magia, compila senza quel warning. Ho stra-controllato che il nome della funzione sia giusto. Non ci sono errori. Sapete cosa ho fatto allora? Ho definito un'altra funzione ancora, sempre in info_key.c e info_key.h e usandola in info_table.c ritorna il warning suddetto. Quindi cosa sta succedendo? In pratica tutte le funzioni definite fino a ieri in info_key.c/.h posso usarle senza warning, ma tutte le funzioni nuove che potrei dover definire mi danno quel maledetto errore di compilazione.

L'ultima cosa incredibile e' che, prendendo i sorgenti che producono sto warning e copiandoli in un nuovo progetto di Visual Studio e copiando la configurazione del nuovo progetto da quella del progetto che produce il warning... tutto compila perfettamente!!! Ma che caspita succede?!?!

mciasco
14-12-2009, 13:26
Piccolo Update:
Modifcando il livello di severita' del warning del compilatore da W3 a W2 (in pratica abbassando la severita') il warning sparisce. Ma a livello pratico quello che ho notato e' che la funzionalita' di auto-completamento di Visual Studio non si comporta correttamente per la funzione che prima generava il warning. In pratica per tutte le altre funzioni, l'auto-completamento mi mostra i nomi suggeriti in un menu a tendina e una volta selezionata la funzione desiderata, appare un piccolo tooltip che mi indica esattamente il prototipo della funzione (es. int printf(const *char Format..)).
Per quella maledetta funzione che genera il warning invece, l'auto-completamente funziona parzialmente, cioe' la funzione appare fra quelle suggerite nel menu a tendina, ma una volta selezionata, non compare il tooltip con le indicazioni del prototipo della funzione.
Misterioso...

shodan
14-12-2009, 18:30
Magari se mostri il codice si può dire qualcosa di più.

Loading