Diferença entre EXTERN e extern

Programação C em geral

Moderadores: 51, guest2003

Diferença entre EXTERN e extern

Mensagempor proex » 17 Mai 2014 11:19

Alguém poderia me explicar a diferença entre EXTERN e extern?

.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Re: Diferença entre EXTERN e extern

Mensagempor barboza » 17 Mai 2014 11:33

proex escreveu:Alguém poderia me explicar a diferença entre EXTERN e extern?

.



Compiador usado?
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: Diferença entre EXTERN e extern

Mensagempor proex » 17 Mai 2014 13:00

.
Keil.

.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Re: Diferença entre EXTERN e extern

Mensagempor Rodrigo_P_A » 17 Mai 2014 14:15

o padrão em C em qualquer compilador é "extern" minúsculo.

o outro EXTERN deve ser alguma macro definida pelo código que você está usando
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Diferença entre EXTERN e extern

Mensagempor andre_luis » 17 Mai 2014 15:02

Exatamente, tenho visto muita coisa parecida com isso:

Código: Selecionar todos
#ifdef NOMEDOARQUIVO_C
#define EXTERN
#else
#define EXTERN extern
#endif



+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Diferença entre EXTERN e extern

Mensagempor barboza » 17 Mai 2014 15:08

andre_teprom escreveu:Exatamente, tenho visto muita coisa parecida com isso:

Código: Selecionar todos
#ifdef NOMEDOARQUIVO_C
#define EXTERN
#else
#define EXTERN extern
#endif



+++


Trabalho com um código que usa isso, mas o nome da MACRO é PUBLIC.
É uma maneira de "publicar" a váriavel de um modulo através do .h dele.

PUBLIC tipox varx;

Assim ela será definida pelo .c que terá a definição do NOMEDOARQUIVO_C e para os outros .c que incluir seu .h, ela será uma variavél do tipo extern.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: Diferença entre EXTERN e extern

Mensagempor Rodrigo_P_A » 17 Mai 2014 15:46

eu só num entendo ainda pq isso. A maioria dos compiladores que trabalho num precisa ficar fazendo isso, mesmo que você inclua o arquivo header com as declarações extern no código fonte em C ele num reclama de nada, então num precisa ficar fazendo isso.
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Diferença entre EXTERN e extern

Mensagempor barboza » 17 Mai 2014 15:53

Rodrigo_P_A escreveu:eu só num entendo ainda pq isso. A maioria dos compiladores que trabalho num precisa ficar fazendo isso, mesmo que você inclua o arquivo header com as declarações extern no código fonte em C ele num reclama de nada, então num precisa ficar fazendo isso.


É porque assim, a variavél fica declarada e publicada na mesma linha de código.

Se o .h for incluído pelo seu .c, a MACRO é vazia e a variável é declarada pelo modulo .c dela.
Se o .h for incluído por um terceiro, a MACRO se torna extern e o que era a declaração da variável, se torna sua referencia publica.

Então dentro do .c você pode declarar somente as locais (static) e no .h o que quer publico.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: Diferença entre EXTERN e extern

Mensagempor proex » 17 Mai 2014 15:56

Agora sim entendi a finalidade.

.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Re: Diferença entre EXTERN e extern

Mensagempor barboza » 17 Mai 2014 16:14

proex escreveu:Agora sim entendi a finalidade.

.


Joinha pra vc!
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: Diferença entre EXTERN e extern

Mensagempor cfreund » 17 Mai 2014 16:17

barboza, como o compilador vai diferenciar o source?

-------------------------------------------------------------------

Simples né... basta um #define antes do #include.... Não tinha parado pra pensar. Sorry.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: Diferença entre EXTERN e extern

Mensagempor barboza » 17 Mai 2014 16:27

cfreund escreveu:barboza, como o compilador vai diferenciar o source?

-------------------------------------------------------------------

Simples né... basta um #define antes do #include.... Não tinha parado pra pensar. Sorry.


Sim, o .c seria

Código: Selecionar todos

#define nomearquivo_c

#include arquivo.h

static tipoy vary;

static void localprocedure(void);

void main(void)
{
    vary = 0;
    varx = 0;
    localprocedure();
    publicprocedure();
}

static void localprocedure(void)
{
}

void publicprocedure(void)
{
}


O .h seria:

Código: Selecionar todos
#ifdef nomearquivo_c
#define PUBLIC
#else
#define PUBLIC extern
#endif

PUBLIC typox varx;

void publicprocedure(void);
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: Diferença entre EXTERN e extern

Mensagempor Rodrigo_P_A » 17 Mai 2014 18:55

Eu já uso variáveis globais, incluo o meu header no meu fonte e mesmo assim tudo funciona normalmente.

Num precisa fazer isso, por exemplo:

arquivo main.h

extern int variavel_global;

arquivo main.c

#include "main.h"

// aqui eu declaro as variáveis globais
int variavel_global;


int main ( int argc, char **argv)
{
// blablablablbalbla
}


mas cada um tem um gosto.
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Diferença entre EXTERN e extern

Mensagempor cfreund » 17 Mai 2014 19:03

Também faço dessa forma. Mas a idéia é interessante para programas complexos.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: Diferença entre EXTERN e extern

Mensagempor proex » 17 Mai 2014 19:10

Eu tambem faço assim como o Rodrigo falou.

Pra que complexar? :D

.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Próximo

Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x