作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以用 C 编写通用求和函数?
我正在尝试编写一个处理任何数字类型的求和函数。
double sum(void* myArrayVoidPtr, size_t arrayLength, int arrayType){
int i;
double result = 0;
//The goal is to make this next line depend on arrayType
//e.g. if(arrayType == UINT16)
unsigned short* myArrayTypePtr = (unsigned short*) myArrayVoidPtr;
for(i = 0; i < arrayLength; i++){
result += *myArrayTypePtr;
myArrayTypePtr++;
}
return result;
}
最佳答案
在 C 中创建泛型函数是不可能的。与 C++ 不同,您没有 templates .模板允许您创建同一函数的多个版本,不同的是 type
(即 - int
、float
或任何 class
) 他们“接受”。 这意味着函数被编译了不止一次。
C 没有模板,但您可以为此编写一个宏。这基本上等同于 C++ 的模板,只是功能没那么强大。不过它将是“内联的”,而不是真正的函数。
#define SUM(arr, len, sum) do { int i; for(i = 0; i < len; ++i) sum += arr[i]; } while(0);
int main(void) {
int i_arr[] = {1,2,3};
double d_arr[] = {1.5, 2.5, 3.5};
int sum = 0;
double d_sum = 0;
SUM(i_arr, 3, sum)
SUM(d_arr, 3, d_sum);
printf("%d, %f\n", sum, d_sum);
return 0;
}
输出:
6, 7.500000
关于c - c中的泛型求和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30670860/
我是一名优秀的程序员,十分优秀!