Pergunta

Estou tendo dificuldade em descobrir por que não posso ter a mesma função em vários arquivos de origem C. Eu sempre pensei que não posso acessar funções em outro arquivo de origem, desde que não sejam declaradas em um arquivo de cabeçalho.

Vamos supor que eu tenha o seguinte:

main.c -> inclui Thread1.h & Thread2.h

Thread1.h -> declara por exemplo, void * Thread1 ();

Thread1.c -> define void * Thread1 () {} e define void Lock () {}

Thread2.h -> declara por exemplo, void * thread2 ();

Thread2.c -> define void * thread2 () {} e define void Lock () {}

Agora o GCC me diz que não posso fazer isso!

gcc -tthread -wall -o executável main.c Thread1.c Thread2.c

Erro: Definição múltipla de `bloqueio '

Então minha pergunta agora é:Como posso realizar o que quero?

Eu não acho que isso seja impossível. Caso contrário, todo esse código -fonte C disponível em todas as muitas bibliotecas C precisaria ser único. (Nah não faria sentido, ou seria?)

Por isso, pensei comigo mesma há cerca de 3 horas que deve haver uma solução. Que devo estar perdendo alguma coisa aqui.

Bem, eu tentei pesquisar no Google ... mas de alguma forma minhas habilidades no Google não me ajudaram desta vez. Não há realmente nenhuma maneira de fazer isso? Ou eu sou apenas estúpido em procurar por isso?

Desde já, obrigado,

Leep

Foi útil?

Solução

Você precisará dessa função lock() ser static.

static void lock() {..}

A razão é que funciona com static não são visíveis fora da "unidade de tradução". Em outras palavras (provavelmente erradas), as funções estáticas são privado para o arquivo *.c. Portanto, eles não causam erros de vinculação no estágio de ligação, como você está tendo atualmente.

Outras dicas

Você deve declarar bloqueio como static void lock(){}.

Caso contrário, o nome da função será visível em todo o programa e você receberá um nome de colisão (embora ainda não possa chamá -lo sem um protótipo de função).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top