我想定义一个名为 Int_1_100_Type
的类型,它是一个取值范围为1到100的 integer
变量。该如何定义?
例如:
我要把这个变量传给一个接受 Int_1_100_Type
类型变量的函数,
funca(Int_1_100_Type Var1)
您不能这样做,因为C语言没有这样的功能。当然,您可以使用typedef来定义一个int类型:
typedef int int_1_100_Type;
但是没有办法限制其范围。在C++中,您可以创建一个具有此功能的新类型,但我认为很少有人会费心 - 您只需要在使用该类型的函数中添加范围检查。
enum rights {Read = 1, Write = 2};
的范围包括0(无权限)和3(读写权限)。 - MSalterstypedef
定义一个 char
。 - cafenum rights
,例如当sizeof(rights) < sizeof(int)
时。 - MSalterstypedef struct s_foo {
int member;
} Foo;
Foo* newFoo(int input); // ctor
void get(Foo *f); // accessor
在mutator/ctor中强制执行您的条件
如果您将其放在自己的文件中,您还可以隐藏类的实现,您可以像C一样进行面向对象编程
你不能对整数的范围设置这种限制。
当然,你可以使用typedef
定义它:
typedef int int_1_100;
typedef unsigned int int_1_100;
但是在C语言中,并没有阻止你编写以下代码:
int_1_100 x = 1000;
typedef
怎么比第一个更好了?唯一的区别就是在第二种情况下需要打更多的字。它们都涵盖了所需的范围(1-100),它们占用的空间相同,超出范围的值也相同,对吧?最重要的是,正如你所知道的,int
是多字节类型(int
使用的字节数取决于CPU/OS),为什么不仅使用char
作为类型,它基本上是始终需要1个字节并且覆盖1-100范围的int
(对于unsigned char
也适用,但是又���又难打)。只是好奇。 - Wh1T3h4Ck5在 C 语言中,没有办法定义一个必须在特定范围内的类型。但是你可以在函数中检查每个值,例如:
int funca(int Var1)
{
assert(Var1 >= 1);
assert(Var1 < 101);
...
}
int
变量上进行边界检查。 - tzaman