gpt4 book ai didi

c - c中的泛型求和函数

转载 作者:行者123 更新时间:2023-12-01 13:52:26 25 4
gpt4 key购买 nike

是否可以用 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(即 - intfloat 或任何 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com