Jump to content
pedrotuga

function templates versus macros

Recommended Posts

pedrotuga

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

Share this post


Link to post
Share on other sites
Hipnoted

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


"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Share this post


Link to post
Share on other sites
Rui Carlos

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

Share this post


Link to post
Share on other sites
nDray
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.....

Share this post


Link to post
Share on other sites
nDray

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...

Share this post


Link to post
Share on other sites
Rui Carlos

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).

Share this post


Link to post
Share on other sites
shumy

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.


Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Share this post


Link to post
Share on other sites
nDray

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....

Share this post


Link to post
Share on other sites
nDray

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...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.