2017-07-24 43 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++)如何不支持泛型函數做了進一步的說明,所以這個答案應該完全清楚。再次,不要只是默默地投票,請在評論中表達你的疑慮,所以我知道你認爲這個答案錯過了。 –