0

さまざまな数値型の配列を操作するためのジェネリック メソッドを含むファイルを取得しました (基本的な考え方は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

ここで正確に何が間違っていますか?最初にプリプロセッサを実行し、適切な内容で別のファイルを作成すると機能しますが、それはひどいものです。

4

1 に答える 1