Para muitas tarefas rápidas em que se poderia empregar uma função f(x,y)
, em C simples, são usadas macros. Gostaria de perguntar especificamente sobre esses casos, que podem ser solucionados por uma chamada de função (ou seja, macros usadas para embutir funções, não para expansão de código arbitrário).
Normalmente, as funções C não estão embutidas, pois podem estar vinculadas a outros arquivos C. No entanto, as funções C estáticas são visíveis apenas no arquivo C em que estão definidas. Portanto, elas podem ser incorporadas pelos compiladores. Ouvi dizer que muitas macros devem ser substituídas, transformando-as em funções estáticas, porque isso produz código mais seguro.
Existem casos em que essa não é uma boa ideia?
Novamente: Não pergunte sobre macros de produção de código com construções iguais a ## que não podem ser expressas como uma função.
inline
ing funções apenas garante que pode ser definido várias vezes no binário, o compilador pode decidir se ele vai realmente em linha-lo para talvez economizar espaçoinline
, não se trata de C ++.inline
em C, pelo menos desde C99. Para uma visão geral rápida, consulte Wikipedia sobre funções embutidas .Respostas:
As macros solucionáveis por uma chamada de função têm muitas armadilhas:
++i
.Macros que são solucionáveis por uma chamada de função podem ter sido úteis para fornecer inlining em um compilador primitivo. Não conheço nenhum compilador que não lide com funções embutidas e alguns podem até embutir nas unidades de compilação.
Não há razão para que um compilador não consiga fornecer duas versões de uma função, uma
call
ed tradicional e umainline
d. Você deve olhar para a documentação do compilador que está direcionando. Além disso, convém examinar a montagem gerada: mesmo se você não conhece a montagem, pode aprender rapidamente a saber se alguma função foi incorporada ou não. (Comece com exemplos de bebês para aprender rapidamente isso.)fonte