Os compiladores C/C++, para realizar a verificação de consistência de uso das funções, faz uso dos arquivos de cabeçalhos ( headers ). Nestes arquivos, por exemplo, o protótipo das funções são declarados. Desta forma, o compilador verifica se as chamadas implementadas estão compatíveis com as definições das funções. Para essa questão, suponha a existência de dois arquivos: um contendo o arquivo header e outro contendo a implementação em C .
(A) Arquivo header :
#ifndef _ARQHEADER
#define _ARQHEADER
int func1(int *, int);
float func2(float, char []);
void func3(int *, int *, float);
int func4(char[],int, char);
#endif
(B) Arquivo de implementação
int main()
{
int a,b,c;
float f1,f2;
char str[20],carac;
c=func1(a,b); //Linha 1
f2=func2(f1,str[0]); //Linha 2
c=func3(&a, &b, f1); //Linha 3
c=func4(str,a,carac); //Linha 4
func1(&c,a); //Linha 5
return 0;
}
Analisando a parte de implementação com o arquivo header, assinale a alternativa que contém os possíveis erros que seriam acusados pelo compilador:
(A) Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string
“str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.
(B) Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.
(C) Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string
“str”; as demais linhas estão corretas.
(D) Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string
“str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); na linha 5, falta uma variável para receber o retorno da função “func1”. A linha 4 está correta.
(E) Na linha 2, está sendo passado o caracter da posição 0 e não toda a string “str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.
Soluções para a tarefa
(A) Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string “str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.
Os compiladores C/C++ são utilizados para se verificar a consistência de utilização das funções, fazendo uso dos arquivos de cabeçalhos, também denominados de headers.
Considerando o exposto no enunciado da questão, temos que na linha 1, a variável não está sendo passada por ponteiro. Na linha 2, apenas está sendo passado o caractere da primeira posição. Na linha 3, a função é do tipo void, não existindo a necessidade de atribuição da variável C ao return da função.
Bons estudos!