Für einfache Funktionen, wie z.B. einer Funktion zum Quadrieren von Zahlen, könnte man auf die Idee kommen den Präprozessor zu mißbrauchen um die Funktionen für verschiedene Typen zur Verfügung zu stellen. Statt also für jeden benötigten Typ eine Funktion zu schreiben
inline int quad(int x) { return x*x; } inline short quad(short x) { return x*x; } inline double quad(double x) { return x*x; }
schreibt man ein kurzes Makro, das dann aber sofort den großen Nachteil von Makros aufzeigt.
#define quad(a) (a)*(a)void main() { int x = 3, y; short m = 4, n; double a = 4.5, b;
y = quad(x); // Präprozessor ersetzt zu y = (x)*(x); = 9 ok. n = quad(m); // ==> n = (x)*(x); = 16 ok. b = quad(a); // dto.
y = quad(x++); // ==> y = (x++)*(x++) = 20 = 5*4 Fehler! }