Domanda

Sto avendo un momento difficile capire perché non posso avere la stessa funzione in diversi file di origine C.Ho sempre pensato che non posso accedere alle funzioni in un altro file di origine, purché non dichiarata in un file di intestazione.

Supponiamo che ho i seguenti:

principale.c -> include thread1.h & thread2.h

thread1.h -> dichiara ad es.void * thread1();

thread1.c -> definisce void * thread1(){} e definisce void lock(){}

thread2.h -> dichiara ad es.void * thread2();

thread2.c -> definisce void * thread2(){} e definisce void lock(){}

Ora gcc mi dice che non posso farlo!

gcc -pthread -Wall -o eseguibile principale.c thread1.c thread2.c

ERRORE:definizione di più di `blocco'di

Quindi la mia domanda ora è: Come posso ottenere quello che voglio?

Non credo che questo è pensato per essere impossibile.Altrimenti tutto quello che C codice sorgente disponibile all'interno di tutte le numerose librerie C avrebbe bisogno di essere unico.(nah non avrebbe alcun senso, o sarebbe?)

Così ho pensato di circa 3 ore fa, che ci deve essere una soluzione.Che mi manca qualcosa qui.

Bene ho provato googling è ...ma in qualche modo il mio google abilità non mi ha aiutato questa volta.Non c'è proprio modo di fare questo?O io sono stupido cercare?

Grazie in anticipo,

leep

È stato utile?

Soluzione

Avrai bisogno di quella funzione lock() essere static.

static void lock() {..}

Il motivo è che funziona con static non sono visibili al di fuori dell '"unità di traduzione". In altre parole (probabilmente sbagliate), le funzioni statiche sono privato al file *.c. Quindi non causano errori di collegamento nella fase di collegamento, come stai attualmente avendo.

Altri suggerimenti

È necessario dichiarare blocco static void lock(){}.

Altrimenti il nome della funzione sarà visibile in tutto il programma, e si otterrà un nome di collisione (anche se ancora non sarà in grado di chiamare senza un prototipo di funzione).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top