Что должна вернуть функция? - C (СИ)

Формулировка задачи:

Здравствуйте. Функции turn_bit_on(), turn_bit_off() и toggle_bit() при передаче им некорректного номера бита должны каким-то образом проинформировать вызывающего об ошибке. На данный момент они возвращают -1, но ведь единички могут получиться и при корректной работе. Собственно, что должна вернуть функция в таком случае, каким образом можно обойти проблему? Может быть, просто поставить запрет на использование старшего бита?
#include <stdio.h>
 
int check_range(int);
int check_bit(int, int);
int turn_bit_on(int, int);
int turn_bit_off(int, int);
int toggle_bit(int, int);
 
int main() {
    printf("check: %d\n", check_bit(5, 0)); // 1
    printf("on: %d\n", turn_bit_on(5, 1)); // 7
    printf("off: %d\n", turn_bit_off(5, 0)); // 4
    printf("toggle on: %d\n", toggle_bit(5, 1)); // 7
    printf("toggle off: %d\n", toggle_bit(5, 0)); // 4
 
    return 0;
}
 
int check_range(int bit_id) {
    int size = sizeof(int) * 8;
 
    return (bit_id >=0 && bit_id < size) ? 1 : 0;
}
 
int check_bit(int value, int bit_id) {
    int pattern = 1;
 
    if (check_range(bit_id)) {
        pattern <<= bit_id;
        value = (value & pattern) ? 1 : 0;
    } else {
        value = -1;
    }
 
    return value;
}
 
int turn_bit_on(int value, int bit_id) {
    int pattern = 1;
 
    if (check_range(bit_id)) {
        pattern <<= bit_id;
        value |= pattern;
    } else {
        value = -1;
    }
 
    return value;
}
 
int turn_bit_off(int value, int bit_id) {
    int pattern = ~1;
 
    if (check_range(bit_id)) {
        pattern <<= bit_id;
        value &= pattern;
    } else {
        value = -1;
    }
 
    return value;
}
 
int toggle_bit(int value, int bit_id) {
    int pattern = 1;
 
    if (check_range(bit_id)) {
        pattern <<= bit_id;
        value ^= pattern;
    } else {
        value = -1;
    }
 
    return value;
}

Код к задаче: «Что должна вернуть функция? - C (СИ)»

textual
int turn_bit_on(unsigned long* const pval, const unsigned int n)
{
    if( n > 31 ) { return 0; }
    *pval &= 1 << n;
    return 1;
}

10   голосов, оценка 4.300 из 5


СОХРАНИТЬ ССЫЛКУ