Página 1 de 2

Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 11:19
por proex
Alguém poderia me explicar a diferença entre EXTERN e extern?

.

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 11:33
por barboza
proex escreveu:Alguém poderia me explicar a diferença entre EXTERN e extern?

.



Compiador usado?

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 13:00
por proex
.
Keil.

.

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 14:15
por Rodrigo_P_A
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

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 15:02
por andre_luis
Exatamente, tenho visto muita coisa parecida com isso:

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



+++

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 15:08
por barboza
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.

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 15:46
por Rodrigo_P_A
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.

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 15:53
por barboza
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.

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 15:56
por proex
Agora sim entendi a finalidade.

.

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 16:14
por barboza
proex escreveu:Agora sim entendi a finalidade.

.


Joinha pra vc!

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 16:17
por cfreund
barboza, como o compilador vai diferenciar o source?

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

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

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 16:27
por barboza
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);

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 18:55
por Rodrigo_P_A
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.

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 19:03
por cfreund
Também faço dessa forma. Mas a idéia é interessante para programas complexos.

Re: Diferença entre EXTERN e extern

MensagemEnviado: 17 Mai 2014 19:10
por proex
Eu tambem faço assim como o Rodrigo falou.

Pra que complexar? :D

.