duvidas sobre macros [RESOLVIDO]

1. duvidas sobre macros [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 06/10/2014 - 16:45h

Boa tarde,
Nos ultimos 2 dias li bastante sobre macros inclusive na própria página do gcc e em outros sites, mas o assunto é ainda confuso para mim e eu estou apanhando muito.

A questão é a seguinte:

Precisava criar um tipo de variável que recebesse o tipo de dado (isso mesmo somente o int, float ...), tentei de vários modos, onde pude concluir que a única saída seria apelar para as macros.

para avançar em meu código preciso de uma coisa que receba o tipo o que eu já fiz, e fazer com que de alguma maneira esse tipo receba quantos * eu quiser, de forma manual isso funciona normalmente, ex.:


#include <stdio.h>
#define x *
#define tipo(type) type x

int main(void)
{
tipo(int) a; //equivalente a declarar um ponteiro int *a;
return 0;
}


se fizer assim também funciona


#include <stdio.h>
#define x *
#define tipo(type) type x x

int main(void)
{
tipo(int) a; //equivalente a declarar um ponteiro int **a;
return 0;
}


acontece que eu preciso concatenar o "*" de forma dinâmica mas não como string.

eu tentei da seguinte forma:



#include <stdio.h>
#define x *
#define tipo(type,a) (for(int i=0;i<a;i++) type+=x; return type;)

int main(void)
{
tipo(int,3) a; //equivalente a declarar um ponteiro int ***a( se funcionasse);
return 0;
}


o que eu estou fazendo de errado?
por que ele não reconhece o for? já que teóricamente era para reconhecer.
caso saibam, como fazer?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/10/2014 - 15:57h

O preprocessador, responsável pelas macros usadas em programas em C, não faz parte da linguagem de programação em C. Ainda que os padrões do C façam uma serie de exigências mínimas para o preprocessador, ele é, tecnicamente falando, uma entidade separada do compilador. O fato de o compilador C geralmente chamar o preprocessador no primeiro estágio da compilação, não afeta essa independência. Em particular, o preprocessador não entende estruturas de repetição como o for, que é um comando da linguagem C, e só é entendido pelo compilador numa etapa de compilação posterior à de invocação do preprocessador.

Creio que você quer algo como macros recursivas. Em princípio, isso não é possível com o preprocessador descrito nos padrões do C. No entanto, existem truques que podem ajudar a conseguir efeitos parecidos em alguns casos. Veja, por exemplo, [link]https://github.com/pfultz2/Cloak/wiki/C-Preprocessor-tricks,-tips,-and-idioms[/link].

3. Re: duvidas sobre macros [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 06/10/2014 - 17:39h

Amigo , pelo que vejo , seria melhor tentar criar uma funcao chamada "tipo" igual vc fez no define , pelo que eu saiba (posso estar errado),as macros elas nao suportam o ';'

Se quiser , posso tentar fazer um programa parecido com o que você quer

EDIT : Vou fazer um exemplo em C++ usando templates , pois isso é coisa generia , pois nao se tem total informação

Espero ter ajudado

[]'s

T+


4. Re: duvidas sobre macros [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 06/10/2014 - 18:36h

a parte de não estar entendendo o for era falta do parâmetro -std=gnu99

mas ainda continua dando erro de sintaxe.


5. Re: duvidas sobre macros [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 06/10/2014 - 18:45h

Cara , evite usar o gnu 99 , sempre declare as variaveis antes do for !

Vc viu o que esta fazendo ?
Vc esta tentando juntar um tipo (int,...) com *,por isso nao vai , temos que achar um jeito de fazer isso de outra maneira.
Vc tem skype?

Se sim , me add e podemos trocar umas ideias por lá

Skype : thihup

T+


6. Re: duvidas sobre macros [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 07/10/2014 - 02:07h

infelizmente não tenho skype.


7. Re: duvidas sobre macros [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 07/10/2014 - 15:24h

consegui achar um vídeo com explicação em português, e infelizmente ele não servirá ao propósito que eu desejo alcançar, obrigado pela ajuda, e estou encerrando o tópico.


8. Re: duvidas sobre macros [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/10/2014 - 15:27h

Thihup escreveu:

Cara , evite usar o gnu 99 , sempre declare as variaveis antes do for !


Por quê? Alguma explicação razoável para manter-se preso a versões antigas da linguagem? Até a Microsoft deu o braço a torcer, e deve incluir (se é que já não incluiu) suporte ao C11, depois de anos insistindo em suportar somente C89.

(Em tempo: eu acho interessante usar C99 ou C11, mas não necessariamente com as extensões da GNU ou de qualquer outro fabricante.)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts