Vložené funkce versus makra
Přestože vložené funkce jsou podobné makra (protože na místě o volání v době kompilace kódu funkce rozbalený), vložené funkce jsou analyzovány pomocí kompilátoru, vzhledem k tomu, že makra jsou rozbaleny tak preprocesoru.Proto existuje několik důležitých rozdílů:
Vložené funkce podle všechny protokoly typu bezpečnosti na normální funkce vynucena.
Vložené funkce jsou určeny pomocí stejnou syntaxi jako ostatní funkce, s výjimkou, že obsahují vložené klíčové slovo v deklaraci funkce.
Výrazy, které jsou předány jako argumenty funkce vložené jsou vyhodnocovány jednou.V některých případech může být více než jednou vyhodnocen výrazy, které jsou předány jako argumenty makra.
Příklad
Následující příklad ukazuje makro, které převede na malá písmena na velká písmena:
// inline_functions_macro.c
#include <stdio.h>
#include <conio.h>
#define toupper(a) ((a) >= 'a' && ((a) <= 'z') ? ((a)-('a'-'A')):(a))
int main() {
char ch;
printf_s("Enter a character: ");
ch = toupper( getc(stdin) );
printf_s( "%c", ch );
}
Záměr výrazu toupper(getc(stdin)) je znak obsaženou z konzoly zařízení (stdin) a v případě potřeby převedeny na velká písmena.
Z důvodu provádění makra getc je spuštěn po určení zda znak je větší než nebo rovno "a" a jakmile určit, zda je menší než "z". Pokud je v rozsahu, getc znovu spuštěn znak převést na velká písmena.To znamená, že program čeká na dva nebo tři znaky, v ideálním případě ji čekat pouze jedna.
Vložené funkce napravit popsané dříve:
// inline_functions_inline.cpp
#include <stdio.h>
#include <conio.h>
inline char toupper( char a ) {
return ((a >= 'a' && a <= 'z') ? a-('a'-'A') : a );
}
int main() {
printf_s("Enter a character: ");
char ch = toupper( getc(stdin) );
printf_s( "%c", ch );
}