передача шестнадцатеричного числа в функцию - PullRequest
4 голосов
/ 30 января 2010

gcc 4.4.2 c89

У меня есть эти определения в нашем заголовочном файле API.

/* Reason for releasing call */
#define UNASSIGNED_NUMBER      0x01  /* Number unassigned / unallocated */
#define NORMAL_CLEARING        0x10  /* Call dropped under normal conditions*/
#define CHANNEL_UNACCEPTABLE   0x06
#define USER_BUSY              0x11  /* End user is busy */
.
.
.

Однако я хочу передать один в функцию, но я не уверен в типе. Я мог бы передать как целое число? Функция release_call принимает один из них в качестве параметра. Однако, я не уверен, поскольку определения определены как шестнадцатеричное обозначение.

drop_and_release_call(23, 6); /* Dropping call for CHANNEL_UNACCEPTABLE */


uint32_t drop_and_release_call(uint32_t port_num, uint32_t reason)
{
    release_call(port_num, reason);
}

Большое спасибо за любые предложения,

Ответы [ 6 ]

6 голосов
/ 30 января 2010

0x06 и 6CHANNEL_UNACCEPTABLE) эквивалентны. Так же, как и 0x11 и 17USER_BUSY). Для компьютера нет различия между шестнадцатеричным и десятичным числами.

(Вы должны напишите drop_and_release_call(23, CHANNEL_UNACCEPTABLE) для ясности.)

4 голосов
/ 30 января 2010

Да, это просто целое число.

Шестнадцатеричный аспект этого важен только тогда, когда он отображается для чтения.

3 голосов
/ 30 января 2010

Причина, по которой эти определения сделаны, заключается в том, что вы можете вызывать свою функцию следующим образом:

drop_and_release_call(23, CHANNEL_UNACCEPTABLE);

Если вы действительно хотите использовать числа, да, вы можете просто передать их напрямую:

drop_and_release_call(23, 0x06);
2 голосов
/ 30 января 2010

C не имеет значения, было ли оно в коде как основание 16 или основание 10 ... оно будет представлять его как целое число в любом случае.

Единственный раз, когда вам действительно нужно беспокоиться о базах, это во время ввода или вывода.

2 голосов
/ 30 января 2010

Да, вы можете передать его как целочисленный или беззнаковый целочисленный тип. Эти имена заменяются препроцессором C, чтобы стать числами, которые они определяют. Эти числа являются действительными целочисленными литералами.

Обычно "перечислительные" типы (например, номер порта) обычно оставляют без знака. Флаги тоже.

1 голос
/ 30 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...