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_iinvá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.)