さまざまな数値型の配列を操作するためのジェネリック メソッドを含むファイルを取得しました (基本的な考え方はPseudo-generics in C で説明されています)。TYPE
マクロを設定することでタイプを指定できます。こんな感じです(ほんの一部)。
array_analyzers.c
:
#ifndef TYPE
#error TYPE isn't defined
#endif
#define CONCAT(x, y) x ## y
#define GET_NAME(BASE, TYPE) CONCAT(BASE, TYPE)
TYPE GET_NAME(get_minimum_, TYPE) (TYPE nums[static 1], int len){
TYPE min = nums[0];
for (int i = 1; i < len; i++) {
if (nums[i] < min) {
min = nums[i];
}
}
return min;
}
#undef CONCAT
#undef GET_NAME
#undef TYPE
ここで、次のようなヘッダー ファイルを作成しました。
array_analyzers.h
:
#ifndef TYPE
#error TYPE isn't defined
#endif
#define CONCAT(x, y) x ## y
#define GET_NAME(BASE, TYPE) CONCAT(BASE, TYPE)
TYPE GET_NAME(get_minimum_, TYPE) (TYPE nums[static 1], int len);
#undef CONCAT
#undef GET_NAME
#undef TYPE
最後に、これを次から使用したいmain.c
:
#include <stdio.h>
#define TYPE int
#include "array_analyzers.h"
#define TYPE double
#include "array_analyzers.h"
int main(void){
int nums[] = {1, 2, 3};
printf("%i\n", get_minimum_int(nums, 3));
}
ただし、次のエラー メッセージが表示されます。
array_analyzers.c:2:2: error: #error TYPE isn't defined
ここで正確に何が間違っていますか?最初にプリプロセッサを実行し、適切な内容で別のファイルを作成すると機能しますが、それはひどいものです。