Prós e contras de diferentes funções macro / métodos inline em C
De acordo com o C FAQExistem basicamente 3 métodos práticos para o código "inlining" em C:
#define MACRO(arg1, arg2) do { \
/* declarations */ \
stmt1; \
stmt2; \
/* ... */ \
} while(0) /* (no trailing ; ) */
ou
#define FUNC(arg1, arg2) (expr1, expr2, expr3)
Para esclarecer este, os argumentos são usados nas expressões, e o operador vírgula retorna o valor da última expressão.
ou
usando oinline
declaração que é apoiada comoextensão para gcc e no padrão c99.
odo { ... } while (0)
O método é amplamente utilizado no kernel do Linux, mas eu não encontrei os outros dois métodos com muita frequência, se é que algum.
Estou me referindo especificamente a "funções" com várias instruções, e não a instruções únicas como MAX ou MIN.
Quais são os prós e contras de cada método, e por que você escolheria um sobre o outro em várias situações?