2010-04-14 138 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