我得到了一个文件,其中包含用于处理不同数字类型的数组的通用方法(基本思想在 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
这里到底有什么问题?当我首先运行预处理器并创建具有正确内容的单独文件时,它可以工作,但这太糟糕了。