Ciao a tutti!
Non riesco a capire bene un aspetto dei puntatori void.
Per spiegarmi meglio faccio un esempio:
avete presente la funzione
void* shmat(int shmid, const void *shmaddr, int shmflg),
che "attacca" un segmento di memoria condivisa allo spazio di indirizzi del processo chiamante? Ebbene, in caso di fallimento, tale funzione riporta il valore -1 anche se in teoria il tipo restituito dovrebbe essere un void*. Pero' se nel programma si fa un test del tipo
codice:
if (shmat(<parametri>)<0)
{ ... }
la cosa non da problemi; se invece definisco una mia funzione
codice:
void* Funzione()
{ return -1; }
e poi faccio un test tipo
codice:
if (Funzione()<0)
{ ... }
il codice tra parentesi graffe non viene mai eseguito, perche' la funzione in realta' riporta il valore del puntatore e non -1.
Ho cercato i sorgenti della funzione shmat per vedere come funziona, ma non li ho trovati... Sapreste spiegarmi questa differenza di comportamento oppure il modo per far si che la funzione void* Funzione() riporti effettivamente -1?
Ah, sto facendo riferimento a programmazione in ambiente Unix...
Grazie,
Gica