• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrotuga

function templates versus macros

12 mensagens neste tópico

Para quem se aventurou por linguagens dynamic typed, o uso de templates ou de macros apresenta-se como um must have quando se volta ao C++.

Aparentemente o uso de macros é desaconselhado.

Baseando-se na vossa experiencia, quais são as grandes desvantagens das macros em relação aos templates?

Rui carlos, warrior, saco, hipnoted e o restante pessoal destas andanças de C/C++, digam aí de vossa justiça:

Segundo o que li as vatangens são estas ( leiam só depois de responderem para não vos influenciar a resposta ) :

1.templates sao type-safe, ou seja, nao permitem erros de tipo de variaveis

2.as macros são pre-processadas atraves de simples operações de substituição de texto sem qq verificação compilatória ( esta palavra existe??? ), o que faz com que os erros se refiram para a macro expandida em vez da definição desta, isto pode tornar o processo de debuggin dificil

mas isto foi o que eu li por aí... nem sequer nunca usei isto

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Referiste o meu nome mas eu nunca usei isso... mas gostava de saber também mais opiniões sobre pessoal entendido.

Acho que o resto do pessoal também não é grande expert em C++ mas sim em C.

Sorry o *bump* , mas às vezes dá jeito. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, é capaz.

Mas as macros já vêm do C... os templates é que não.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não gosto de usar macros para definir funções. só o fiz uma vez num programa de cálculo matemático, em que a eficiência era bastante importante, mas nem sequer era por causa de precisar de definir uma operação sobre vários tipos. acho que são pouco funcionais e pouco elegantes.

já quando usas templates, o código é semelhante ao do código normal. o processo de desenvolvimento de alguma coisa que envolva templates, normalmente começa com a criação do código para um caso particular, e depois é que fazemos passamos para os templates.

parece-me que as macros não fazem nada de mais, aquilo que fazes com macros, podes fazer sem elas, e tal não acrescenta muito trabalho. já fazer uma STL sem templates, não me prece muito fácil...

resumindo, acho que os templates são muito mais funcionais do que as macros, e os templates permitem manter a estrutura do programa, ao contrário das macros.

PS1: se calhar se o C++ não tivesse outras funcionalidades como a sobrecarga de operadores, o templates também teriam menos utilidade...

PS2: não sou nenhum expert em C++ :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Parameterized Macros Versus Inline Functions

In most cases it is better to use an inline function instead of a parameterized macro, to avoid

most of the traps caused by parameterized macros. But there are cases where a parameterized

macro may be better than an inline function. For example, the SQR macro works for both

float and int data types. We'd have to write two inline functions to perform the same

functions.

^

|

SQR ali refere-se à macro "square" que criou num exemplo acima...

Mas fala mais sobre macros parametrizadas....

Eu acho que macros não trazem grande vantagem em relação a funções inline.... Basta apenas lembrar que para as funções inline serem "inline" é preciso compilar com optimização -S3.....

Lembro-me de estar a ver uma source qualquer do kernel linux e num ficheiro apenas tinha umas quatro ou cinco macros parametrizadas, não sei se é porque quando foi criado ainda não tinha aparecido o inlining, ou "se quê"..... :P

Lembro-me que o GCC informa que já suportava esse tipo de funções mesmo antes de a linguagem a adoptar oficialmente.....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

por acaso a comparação não era com funções inline, mas sim com templates :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

por acaso a comparação não era com funções inline, mas sim com templates :P

Eu acho que a questão nunca pode ser macros vs templates.....

Quer dizer, pode.... Mas a vantagem das macros não é suportar todos os tipos de variáveis.... É executar a função "ali no sítio", sem chamar a stack....

Se num dado problema a dúvida for unicamente os tipos de variáveis a suportar, então eu usaria, sem sombra de dúvidas, templates.

As funções com templates também podem ser inline, acrescente-se...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que a questão nunca pode ser macros vs templates.....

Quer dizer, pode.... Mas a vantagem das macros não é suportar todos os tipos de variáveis.... É executar a função "ali no sítio", sem chamar a stack....

eu diria que as macros têm as duas vantagens...

(apesar de só ter usado macros para definir funções para as tornar inline).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem.

Os templates podem servir para muita coisa, acho que não vale a pena enumerar vantagens porque é uma area que continua a ser explorada.

http://aszt.inf.elte.hu/~gsd/halado_cpp/ch06s04.html

Um exemplo muito bom do poder das templates são as implementações de smart pointers.

Os macros também são usados juntamente com outros comandos de pré-processamento para tornar o código portável.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que a questão nunca pode ser macros vs templates.....

Quer dizer, pode.... Mas a vantagem das macros não é suportar todos os tipos de variáveis.... É executar a função "ali no sítio", sem chamar a stack....

eu diria que as macros têm as duas vantagens...

(apesar de só ter usado macros para definir funções para as tornar inline).

Claro que têm as duas vantagens, mas podes aplicar essas duas vantagens de outras maneiras, sem desvantagens, enquanto que consegues apontar muito mais desvantagens para o caso das macros....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Macros em C++ é de evitar ao máximo possivel na minha opinião.

Um exemplo simples de erros possiveis com macros é o de

#define sqrt(a) a * a

no código ao fazer

int b = 2;

sqrt(b++);

a macro ia "expandir-se" em

b++ *  b++

http://www.research.att.com/~bs/bs_faq2.html#macro

É a grande desvantagem. É que é preciso ter muito cuidado a programar.... É MUITO fácil fazer asneiras...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora