Ir ao conteúdo
  • Cadastre-se

c++ 11 - porque evitar macros?


Cambalinho

Posts recomendados

Primeiramente é preciso entender o que é uma macro e qual a diferença e relação a uma função (ou procedimento em outras linguagens).

 

A macro nada mais é que um recurso do compilador e não faz parte da linguagem. 'define' não é uma palavra chave do C/C++, mas uma instrução para o pré-processador que funciona como uma espécie de ctrl+c/ctrl+v.

 

Por exemplo, se eu faço:

#define soma(x,y) (x + y)

Durante a compilação, o compilador vai substituir, por exemplo 'soma(1,2)' por (1 + 2).

 

Mas se soma fosse uma função, int soma(int x, int y); Toda vez que a função for usada no código, o compilador vai substituir pelo endereço na memória onde está a função e chamar esse endereço. Portanto, toda vez que você fizer uso da função soma, o código fazer um CALL ENDEREÇO, guardar na pilha (PUSH) o endereço em que a função chamadora parou, assim como os argumentos passados à função. E após o término da função pegará novamente o endereço da pilha POP, para retornar ao ponto de parada.

 

Dito isso, entendo que é o programador que deve determinar o que é melhor: usar macro e mais recurso de memória; ou função e mais processamento (já que haverá mais instrução para empilhar/desempilhar e chamar a função).

 

É claro que esse é um exemplo simples, mas há casos em que além disso o programador pode levar em conta também a legibilidade/clareza do código.

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

Eu acho o uso de macros perigoso pelo fato de não existirem no código em si (você deveria imaginá-las como um ctrl+c e ctrl+v feito pelo compilador na compilação apenas), não respeitarem escopos e inclusive poderem ser facilmente alteradas pelo cliente.

No C++, eu sugiro usar funções inline. Elas são como uma macro (digamos que o compilador fará um ctrl+c e ctrl+v da mesma forma) mas respeitando todas as leis de uma função. Assim você nao tem nenhum mal desempenho alem da segurança e da interface que uma função pode proporcionar.

 

Use macros pra compilação condicional. Ou seja pra tarefas do compilador na compilação e não do seu código no runtime.

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

muito obrigado a todos.

eu fiz aquela macro para ser mais especifico e evitar os argumentos da template ;)

eu podia fazer 1 class event, mas ficava com o mesmo 'problema': tinha que meter os argumentos da template.. por isso a macro

(ontem nao respondi, porque nao consegui entrar no forum :( )

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