Подтвердить что ты не робот

Определить целые диапазоны в C

Я хочу определить тип с именем Int_1_100_Type, который является переменной integer в диапазоне от 1 до 100. Как я могу определить это?
например: Я передаю эту переменную функции, которая принимает переменную типа Int_1_100_Type, funca(Int_1_100_Type Var1)

4b9b3361

Ответ 1

Вы не можете, C не имеет такой функциональности. Вы можете, конечно, typedef int:

typedef int int_1_100_Type;

но нет возможности ограничить его диапазон. В С++ вы можете создать новый тип с этой функциональностью, но я думаю, что очень немногие люди будут беспокоиться - вам просто нужно поместить проверки диапазона в функции, которые используют этот тип.

Ответ 2

Конечно, вы можете. Все, что вам нужно, это немного основанный на объектах C.

создать файл со структурой и некоторыми членами

typedef struct s_foo {
  int member;
} Foo;

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

Обеспечьте свое состояние в мутаторе /ctor

Если вы сделаете это в своем собственном файле, вы можете скрыть и имплемент класса, вы можете сделать о-подобный C

Ответ 3

Вы не можете установить такой предел для диапазона целого числа.

Конечно, вы можете typedef:

typedef int int_1_100;

или даже лучше:

typedef unsigned int int_1_100;

Но ничто в C не позволит вам писать:

int_1_100 x = 1000;

Чтобы реализовать что-то подобное, вам нужно скрыть реализацию, но это усложнит инициализацию значения (и невозможно выделить значения типа в стеке, с сохранением целостности).

Ответ 4

В С++ был бы способ сделать это, написав класс, который будет действовать как целое число, но это будет слишком много усилий и слишком тяжело, чтобы решение было практичным.

Спасибо Naveen за то, что он указал, что вопрос был только C.

Ответ 5

Нет способа в c определить тип, который должен находиться в определенном диапазоне. Тем не менее, вы можете проверить каждое значение в своих функциях, например.

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