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);
}
非常感谢任何建议,
答案 0 :(得分:6)
0x06
和6
(和CHANNEL_UNACCEPTABLE
)相同。 0x11
和17
(以及USER_BUSY
)也是如此。计算机没有十六进制或十进制的区别。
(为了清楚起见,你应该写drop_and_release_call(23, CHANNEL_UNACCEPTABLE)
。)
答案 1 :(得分:4)
是的,它只是一个整数。
它的十六进制方面只有在显示给我们阅读时才是重要的。
答案 2 :(得分:3)
这些定义的原因是你可以这样调用你的函数:
drop_and_release_call(23, CHANNEL_UNACCEPTABLE);
如果您真的想使用这些数字,是的,您可以直接传递它们:
drop_and_release_call(23, 0x06);
答案 3 :(得分:2)
是的,您可以将其作为整数或无符号整数类型传递。这些名称由C预处理器替换,以成为它们定义的数字。这些数字是有效的整数文字。
习惯上使“枚举”类型(如端口号)无符号。旗帜也是。
答案 4 :(得分:2)
C并不关心它是在代码中作为基数16还是基数10 ......它将以任意方式将其表示为整数。
在输入或输出期间,您唯一真正需要担心的是基数。
答案 5 :(得分:1)
C编译器将值解析为int。您列出的值只需要5位,它可以很容易地放入char中。但是无论如何,char都被提升为函数调用中的int,你也可以使用int。