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

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

12
задан Oz123 13 October 2013 в 11:31
поделиться

5 ответов

Конечно, можете. Все, что вам нужно, это небольшой объектно-ориентированный C.

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

typedef struct s_foo {
  int member;
} Foo;

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

Обеспечить соблюдение вашего условия в мутаторе / ctor

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

4
ответ дан 2 December 2019 в 22:22
поделиться

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

Вы, конечно, можете typedef его в любом случае:

typedef int int_1_100;

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

typedef unsigned int int_1_100;

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

int_1_100 x = 1000;

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

1
ответ дан 2 December 2019 в 22:22
поделиться

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

int funca(int Var1)
{
    assert(Var1 >= 1);
    assert(Var1 < 101);
    ...
}
0
ответ дан 2 December 2019 в 22:22
поделиться

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

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

0
ответ дан 2 December 2019 в 22:22
поделиться

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

typedef int int_1_100_Type;

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

5
ответ дан 2 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: