Considere o seguinte código "C":
#include<stdio.h>
main()
{
printf("func:%d",Func_i());
}
Func_i()
{
int i=3;
return i;
}
Func_i()
é definido no final do código-fonte e nenhuma declaração é fornecida antes do uso main()
. No momento em que o compilador vê Func_i()
em main()
, ele sai do main()
e descobre Func_i()
. O compilador, de alguma forma, encontra o valor retornado por Func_i()
e o entrega printf()
. Eu também sei que o compilador não pode encontrar o tipo de retorno de Func_i()
. Por padrão, assume (adivinha?) O tipo de retorno de Func_i()
ser int
. Ou seja, se o código tivesse float Func_i()
, o compilador apresentaria o erro: Tipos conflitantes paraFunc_i()
.
A partir da discussão acima, vemos que:
O compilador pode encontrar o valor retornado por
Func_i()
.- Se o compilador pode encontrar o valor retornado
Func_i()
saindo domain()
e pesquisando o código-fonte, por que não consegue encontrar o tipo de Func_i (), mencionado explicitamente .
- Se o compilador pode encontrar o valor retornado
O compilador deve saber que
Func_i()
é do tipo float - é por isso que gera o erro de tipos conflitantes.
- Se o compilador sabe que
Func_i
é do tipo float, então por que ele ainda supõeFunc_i()
ser do tipo int e gera o erro de tipos conflitantes? Por que não faz com queFunc_i()
seja do tipo float?
Eu tenho a mesma dúvida com a declaração da variável . Considere o seguinte código "C":
#include<stdio.h>
main()
{
/* [extern int Data_i;]--omitted the declaration */
printf("func:%d and Var:%d",Func_i(),Data_i);
}
Func_i()
{
int i=3;
return i;
}
int Data_i=4;
O compilador fornece o erro: 'Data_i' não declarado (primeiro uso nesta função).
- Quando o compilador vê
Func_i()
, ele desce para o código-fonte para encontrar o valor retornado por Func_ (). Por que o compilador não pode fazer o mesmo para a variável Data_i?
Editar:
Não conheço os detalhes do trabalho interno do compilador, montador, processador etc. A idéia básica da minha pergunta é que, se eu contar (escrever) o valor de retorno da função no código-fonte, finalmente, após o uso dessa função, o idioma "C" permite que o computador encontre esse valor sem dar nenhum erro. Agora, por que o computador não consegue encontrar o tipo da mesma forma. Por que o tipo de Data_i não pode ser encontrado, pois o valor de retorno de Func_i () foi encontrado. Mesmo se eu usar a extern data-type identifier;
instrução, não estou dizendo o valor a ser retornado por esse identificador (função / variável). Se o computador consegue encontrar esse valor, por que não consegue encontrar o tipo? Por que precisamos da declaração direta?
Obrigado.
Func_i
inválido. Nunca houve uma regra para declarar implicitamente variáveis indefinidas; portanto, o segundo fragmento sempre estava mal formado. (Sim, compiladores não aceitar a primeira amostra ainda porque era válida, se desleixado, sob C89 / C90.)