Ir ao conteúdo
  • Cadastre-se

Linguagem C - É possível fazer isso?


FBO_COUTINHO

Posts recomendados

Em C puro, tendo uma função que possui uma estrutura como parametro, posso passar valores puros pra função e esses valores serem interpretados como sendo uma estrutura?

 

Exemplo:

typedef struct{
 int x;
 int y;
}TPoint;

int distancia(TPoint A, TPoint B)
{
 return(sqrt(sqr(Bx-Ax) + sqr(By-Ay)));
}

void main(void)
{
 int d;
 d = distancia(TPoint(0,0), TPoint(100,100)); //<--- queria fazer esta mágica aqui
 printf("A distancia é %d",d);
}

 

Link para o comentário
Compartilhar em outros sites

Poderia fazer assim:

d = distancia((TPoint){0, 0}, (TPoint){100, 100});

 

Mas seu código tem alguns problemas, não existe a função sqr() (a menos que você a tenha criado no seu programa?), a função da biblioteca math.h para calcular potências é a função pow().

 

A função sqrt() retorna um valor do tipo double, mas sua função distancia() é do tipo int, então ela retorna um int.

 

E para acessar os valores x e y da struct, é preciso usar o . após o nome da variável, ficando A.x e A.y.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Agradeço as considerações a respeito do código.

A chamada da função funcionou do modo como sugeriu "distancia((TPoint){0, 0}, (TPoint){100, 100});"

Mas agora ao compilar o código aparece este erro: identifier 'TPoint' redeclared was declared as: 'struct' now declared as: 'struct'

 

E não existia esta struct em nenhum lugar antes. Tanto que mudei o nome da struct para "TMyPoint" e continua dando o mesmo erro.

Alguma ideia do porquê?

 

Link para o comentário
Compartilhar em outros sites

Continua dando erro...

Achei que poderia ser por causa do nome "TPoint" aí mudei para o código:

 

typedef struct TPxy{
 int x;
 int y;
}TPxxyy;

Ao compilar aparecem as mensagens:

 

identifier 'TPxxyy' redeclared was declared as: 'struct TPxy' now declared as: 'struct '   

 

struct/union/enum/class tag 'TPxy' redefined

Link para o comentário
Compartilhar em outros sites

Segue o código, acredito que no seu há algum erro:

#include <stdio.h>
#include <math.h>

typedef struct{
 int x;
 int y;
}TPoint;

int distancia(TPoint A, TPoint B)
{
	return(sqrt((B.x-A.x) + (B.y-A.y)));//Esse calculo nao esta correto
}

int main(void)
{
 int d;
 d = distancia((TPoint){0,0}, (TPoint){100,100}); //<--- magica feita por isrnick
 printf("A distancia é %d",d);
}
 

 

Link para o comentário
Compartilhar em outros sites

 

5 minutos atrás, Gustavo Andretto disse:

@FBO_COUTINHO você está colocando a struct no arquivo source ou no header?

o arquivo header tem o include guard? #ifndef HEADER_H ...

caso não tenha, adicione isso no começo do seu header


#ifndef NOMEHEADER_H
#define NOMEHEADER_H

e isso no final


#endif

 

 

Cara era isso mesmo, você matou a charada!

Quando coloquei esses "guards" deu certo.

Não entendo o porquê disso mas tá compilando certinho agora. Bom demais!

Muito obrigado pessoal, vocês são 10!

 

Agora pode fechar o tópico porque foi finalizado com chave de ouro!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...