2010-04-14 127 views
11

我想定義一個名爲Int_1_100_Type的類型,它是一個integer變量,範圍從1到100. 我該如何定義這個?
例如: 我傳遞此變量,它接受Int_1_100_Type類型的變量的函數, funca(Int_1_100_Type Var1)定義整數範圍C

+9

爲什麼downvote?僅僅因爲OP想要做的事情不能用C來完成,並不意味着這個問題不夠明確和合理。 – 2010-04-14 12:12:49

+0

你爲什麼要這樣做?如果你的函數需要輸入一個特定的範圍,你可以對一個普通的'int'變量進行邊界檢查。 – tzaman 2010-04-14 12:16:32

+7

@tzaman如果語言支持它(和一些),這是一個很好的功能,並避免在各處編寫範圍檢查。 – 2010-04-14 12:30:41

回答

5

你不能,C沒有這樣的功能。你當然可以鍵入一個int:

typedef int int_1_100_Type; 

但是沒有辦法限制它的範圍。在C++中,您可以使用此功能創建一個新類型,但我認爲很少有人會打擾 - 您只需要在使用該類型的函數中進行範圍檢查。

+0

也許人們可以用一個'enum'來僞造它,如果一個臨牀上瘋了?當然,即使這樣也不能阻止任何人傳入任何舊整數。 – tzaman 2010-04-14 12:14:20

+0

不是。一個枚舉總是有一個包含0的範圍,並且可能值的數量總是2的冪。經典例子:'枚舉權利{讀取= 1,寫入= 2}的範圍;'包括0(無權利)和3(兩者)。 – MSalters 2010-04-14 12:43:50

+0

在這種情況下,你甚至可以'typedef'一個'char'。 – caf 2010-04-14 13:15:45

1

您不能在整數的範圍內放置這種限制。

你當然也可以typedef也無妨:

typedef int int_1_100; 

甚至更​​好:

typedef unsigned int int_1_100; 

但沒有用C可以防止你寫:

int_1_100 x = 1000; 

要實現的東西像這樣,你需要隱藏實現,但這會使初始化變得更加困難ize值(並且不可能在堆棧中完整地隱藏類型的值)。

0

在C++中,可以通過編寫一個類似於整數的類來完成此任務,但這樣做太費工夫,太重量級的解決方案實用。

謝謝Naveen指出問題只有C。

+3

問題被標記爲c而不是C++。 – Naveen 2010-04-14 12:14:15

+0

嗯,是的,我的不好...這確實只能在C++ – wich 2010-04-14 12:16:11

0

c沒有辦法定義一個必須在特定範圍內的類型。但是,您可以檢查功能中的每個值,例如

int funca(int Var1) 
{ 
    assert(Var1 >= 1); 
    assert(Var1 < 101); 
    ... 
} 
4

當然可以。所有你需要的是一點點的基於對象的C.

如果你這樣做在自己創建一個結構文件和一些成員

typedef struct s_foo { 
    int member; 
} Foo; 

Foo* newFoo(int input); // ctor 
void get(Foo *f);   // accessor 

強制你的病情的突變/男星

文件,你也可以隱藏類的impl,你可以做oo-like C

+0

(Grr ...在評論中沒有格式化) 在最近幾個月裏,我學到了一個更好的方法。這有點複雜,但是這裏是簡短的版本。添加「newFoo」和「get」作爲struct Foo(包含函數指針的成員)的成員,並且您可以在單獨的C文件中實現「newFoo」和「get」作爲靜態函數,只要您有構建器對於Foo(這將提供封裝,實現隱藏(某個級別)和一個很好的抽象接口來創建Foo類型的對象) – shiva 2010-12-17 03:21:23