Originariamente inviato da Manugal
Il fatto è che non mostro tutto il codice perché poi ti girerebbe ancora di più la testa.
No ... la testa mi girava per la spiegazione di cui non ho capito quasi nulla ...

Tutto il codice non serve.

Originariamente inviato da Manugal
Le funzioni si trovano in due files separati.
Quella variabile cntOpenDatabases è dichiarata come static in un file .h incluso da entrambe le funzioni ed è inizializzata a -1.
E questo e', secondo me sbagliato.

Nei file include non si definiscono le variabili.

Queste si definiscono in un file sorgente e poi si dichiarano come extern negli altri.

Originariamente inviato da Manugal
A me questa variabile serve perché mi conta i databases che sono stati aperti, però nel momento in cui ne chiudo uno il valore di questa variabile deve diminuire di 1.
Quindi la OpenDatabase aumenta il numero e la CloseDatabase lo diminuisce.

Originariamente inviato da Manugal
Il problema (cioè non è un vero e proprio problema perché una variabile static si comporta così) che si presenta è che se chiamo la OpenDatabaseFile il valore di cntOpenDatabases va a 0 (perché questa funzione lo incrementa).
E questo e' quello che vuoi ...

Originariamente inviato da Manugal
Subito dopo chiamo CloseDatabaseFile e questa funzione mi decrementa questa variabile.
E anche questo e' quello che vuoi ...

Originariamente inviato da Manugal
Ora se io richiamo OpenDatabaseFile il valore di quella variabile, dopo l'incremento, è 1, mentre io voglio che sia 0 (perché è stata decrementata da CloseDatabaseFile). Spero di essere stato chiaro.
Prova a dichiarare la variabile, come ti ho detto, in un solo modulo sorgente (non nell'include) e come extern nell'altro ...

P.S. Due osservazioni ... nel primo esempio avevi scritto

cntOpenDatabases=cntDat;

ma questo non lo ritrovo nella CloseDatabase ...

E alla fine della CloseDatabase scrivi

return LPC_OK;
putchar('\n');

in cui, ovviamente, l'ultima istruzione non verra' mai eseguita.