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
Resposta:
Vamos lá.
** Eu usei "você" para explicar, mas sei que é um exercício, é só pra facilitar a didática.
Na Linha 1, a variável não está sendo passada por ponteiro. Geralmente quando se cria um vetor de inteiros (ex.: int a[20]) na linguagem C/C++ ele é automaticamente interpretado por ponteiro. Ou vc pode criar um malloc para ele ou tbm usar ponteiro (int *a). Ou até mesmo passar como parâmetro dessa forma: "&variavel". Então linha 1 tem esse erro.
Na linha 2, você está passando somente o caractere da primeira posição, ou seja, o caractere na posição 0 do sa sua string/vetor de caracteres.
Na linha 3, como sua função é do tipo void, não tem necessidade vc atribuir a variável C ao return dessa função.
Na linha 5, A função está sendo chamada, mas não tem nenhuma variável atribuída para receber o retorno dessa função.
Explicação:
Resposta:
.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.
Explicação: