2017-07-24 28 views
-4

只要总和为正数,就可以获取数字数组(未知类型)并在每个单元格中创建另一个累积数字总和数组。 如何为任何类型的变量做这个函数? (int,double,long,short,float ..)任意类型的变量的数字排列

+2

告诉我,你是否清楚自己的要求? –

+0

没有[通用选择](http://en.cppreference.com/w/c/language/generic)这是不可能的。 –

+0

这是不可能的。这是C.你可以在C11中使用'_Generic'来实现一些这样的宏。在任何情况下,对于每种类型的数组,都需要一个函数。 –

回答

1

为了简单起见,我展示了一个函数,只是增加了两个数字。我认为你将不会遇到写一个操作数组的函数的问题。

使用C++,你可以使用这样的模板(只是显示在这里证明应该实现什么):

#include <iostream> 

using namespace std; 

template<typename T> T sum(T a, T b) 
{ 
    return a + b; 
} 

int main(void) 
{ 
    long a = 5; 
    long b = 37; 
    long c = sum(a, b); 
    cout << c << endl; 
} 

这将在飞行创建一个真正的功能任何类型是所需的,所以这里将使用这个模板创建一个处理long的函数。

您也可以达到类似使用通用选择在C“打电话安慰”,但这仍然要求您为任何类型的应处理,这样提供实际的功能:

#include <stdio.h> 

static int sum__int(int a, int b) 
{ 
    return a + b; 
} 

static long sum__long(long a, long b) 
{ 
    return a + b; 
} 

static double sum__double(double a, double b) 
{ 
    return a + b; 
} 

#define sum(a, b) _Generic((a), \ 
     int: sum__int, \ 
     long: sum__long, \ 
     double: sum__double \ 
    )((a), (b)) 

int main(void) 
{ 
    long a = 5; 
    long b = 37; 
    long c = sum(a, b); 
    printf("%ld\n", c); 
} 

这只使用sum__long(),其他功能在这个小例子中未使用。如果这让你感到困扰,这是C++更适合这项工作的例子之一。


你应该注意这个答案不显示通用功能(这是我如何理解你的问题,你想要什么)。在C中没有这样的概念。你为为每个数据类型提供一个函数。即使在介绍性的C++示例中,每种数据类型都会有一个函数,但C++模板只是根据您的需要来管理创建这些函数。如果您需要真正的通用函数,则必须选择完全不同的语言(例如Java或C#)。

+0

好吧,如果任何downvoter可以指出这个答案是错误的,我很乐意纠正它。现在我很确定它回答了OP的问题。 –

+0

我对C(甚至C++)如何不支持泛型函数做了进一步的说明,所以这个答案应该完全清楚。再次,不要只是默默地投票,请在评论中表达你的疑虑,所以我知道你认为这个答案错过了。 –