Термін "Узагальнене програмування" вперше було введене Девідом Массером і Олександром Степановим , які описували парадигму програмування, яка заснована на тому, що типи даних і структури даних є абстрактними і не впливають на конкретну реалізацію алгоритмів, а загальні функції реалізовані з використанням узагальнених формалізованих типів.
#define SWAP(_a, _b, type) { type _c; _c = _b; _b = _a; _a = _c; }
#include <stdio.h>
#define SWAP(_a, _b, type) { type _c; _c = _b; _b = _a; _a = _c; }
int main() {
int a=1, b=4;
double c=2.3, d=3.4;
SWAP(a, b, int);
printf("%i %i\n", a, b);
SWAP(c, d, double);
printf("%f %f\n", c, d);
return 0;
}