Página 1 de 1

Uma dúvida curiosa de principiante

MensagemEnviado: 03 Abr 2021 13:04
por Guri
Qual é a diferença de declarar um determinado tipo de protótipo "antes" do MAIN e depois do MAIN, é só estética? :D

Re: Uma dúvida curiosa de principiante

MensagemEnviado: 03 Abr 2021 16:54
por andre_luis
No século passado era mandatório para o compilador declarar antes.

Re: Uma dúvida curiosa de principiante

MensagemEnviado: 06 Abr 2021 11:02
por Guri
aluis-rcastro escreveu:No século passado era mandatório para o compilador declarar antes.

:lol: :lol: Essa foi boa...kkk

Re: Uma dúvida curiosa de principiante

MensagemEnviado: 06 Abr 2021 11:45
por Rodrigo_P_A
aluis-rcastro escreveu:No século passado era mandatório para o compilador declarar antes.


Ainda é, se não declarar antes de usar, vai dar erro, o linker não vai encontrar a rotina.

Re: Uma dúvida curiosa de principiante

MensagemEnviado: 06 Abr 2021 20:06
por ÁgioFelipe
Rodrigo_P_A escreveu:
aluis-rcastro escreveu:No século passado era mandatório para o compilador declarar antes.


Ainda é, se não declarar antes de usar, vai dar erro, o linker não vai encontrar a rotina.

Não é mais, na arduino IDE por exemplo, não precisa declarar antes do main.

Re: Uma dúvida curiosa de principiante

MensagemEnviado: 06 Abr 2021 23:15
por Rodrigo_P_A
Entendi, não entendo nada de arduino. Com compilador gcc e outros de linguagem c/c++ é necessário.

O Arduino faz alguma coisa por trás pra facilitar a vida do usuário


Enviado do meu iPhone usando Tapatalk

Re: Uma dúvida curiosa de principiante

MensagemEnviado: 07 Abr 2021 00:11
por sync
ÁgioFelipe escreveu:
Rodrigo_P_A escreveu:
aluis-rcastro escreveu:No século passado era mandatório para o compilador declarar antes.


Ainda é, se não declarar antes de usar, vai dar erro, o linker não vai encontrar a rotina.

Não é mais, na arduino IDE por exemplo, não precisa declarar antes do main.

Amigo

O Arduino é um dialeto, embora use o gcc para produzir executáveis, todo o ambiente é próprio dele e não segue os padrões do C/C++, possui os dele mesmo. Eu creio que o colega guri usa um compilador C padrão.

Re: Uma dúvida curiosa de principiante

MensagemEnviado: 07 Abr 2021 22:36
por Guri
sync escreveu:
ÁgioFelipe escreveu:
Rodrigo_P_A escreveu:
aluis-rcastro escreveu:No século passado era mandatório para o compilador declarar antes.


Ainda é, se não declarar antes de usar, vai dar erro, o linker não vai encontrar a rotina.

Não é mais, na arduino IDE por exemplo, não precisa declarar antes do main.

Amigo

O Arduino é um dialeto, embora use o gcc para produzir executáveis, todo o ambiente é próprio dele e não segue os padrões do C/C++, possui os dele mesmo. Eu creio que o colega guri usa um compilador C padrão.


Eu utilizo o truestudio da STM e também o queridinho Mikroc. Eu levantei essa questão pelo fato de não ver o do porque alocar o protótipo antes ou depois do MAIN.
:D

Re: Uma dúvida curiosa de principiante

MensagemEnviado: 08 Abr 2021 19:55
por cfreund
Em versões mais recentes, realmente não é necessário. Porém, é conveniente e mais elegante fazê-lo. E também mantém a portabilidade.

Re: Uma dúvida curiosa de principiante

MensagemEnviado: 08 Abr 2021 20:33
por sync
cfreund escreveu:Em versões mais recentes, realmente não é necessário. Porém, é conveniente e mais elegante fazê-lo. E também mantém a portabilidade.


Colega
No C99 é necessário declarar o protótipo antes de fazer referência, as exceções são por conta dos compiladores.

Re: Uma dúvida curiosa de principiante

MensagemEnviado: 08 Abr 2021 20:42
por Rodrigo_P_A
Exemplo 1:
No caso abaixo, vc tem dois arquivos fonte: arquivo1.c e arquivo2.c
Se vc tentar compilar sem informar que a rotina minha_funcao() é externa, o compilador de verdade sem enfeites vai dar erro.

Mesmo se a função estivesse no arquivo.c abaixo do main, daria erro, e vc podeira ter declarado do mesmo jeito que fiz, sendo extern, que ele iria "procurar" sozinho.

Isso vale para variáveis globais.

Os arquivos .h são conjuntos com várias declarações de funções, variáveis, etc.
Você poderia ter declarado em um arquivo .h :
extern void minha_funcao();
e ter incluido o arquivo .h no seu arquivo em C ou vários deles.

arquivo1.c
Código: Selecionar todos
extern void minha_funcao();

int main(int argc,char *argv[]) {
   minha_funcao();
   return 0;
}


arquivo2.c
Código: Selecionar todos

void minha_funcao()
{
  // faz alguma coisa, sei lá o que
}