You can do something like this in a header file:
//
// generic.h
//
#define TOKENPASTE(x, y) x ## y
#define GET_MINIMUM(T) TOKENPASTE(get_minimum_, T)
TYPE GET_MINIMUM (TYPE) (TYPE * nums, size_t len){
TYPE min = nums[0];
for (size_t i = 1; i < len; i++) {
if (nums[i] < min) {
min = nums[i];
}
}
return min;
}
and then #include
it in a source file for each required type, e.g.:
//
// generic.c
//
#define TYPE int
#include "generic.h"
#undef TYPE
#define TYPE float
#include "generic.h"
#undef TYPE
You can test this by running it through the preprocessor:
$ gcc -E generic.c
int get_minimum_int (int * nums, size_t len){
int min = nums[0];
for (size_t i = 1; i < len; i++) {
if (nums[i] < min) {
min = nums[i];
}
}
return min;
}
float get_minimum_float (float * nums, size_t len){
float min = nums[0];
for (size_t i = 1; i < len; i++) {
if (nums[i] < min) {
min = nums[i];
}
}
return min;
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…