char的签名是否是接口问题?
假设我有一个功能
void foo(char *)
在内部,它需要将其输入视为NUL端接字节块(例如,它是字符串上的散列函数)。我可以在函数中将参数转换为unsigned char*
。我也可以将声明改为
void foo(unsigned char *)
现在,鉴于char
,signed char
和unsigned char
是三种不同的类型,在C中术语“接口”的任何合理定义下,这是否构成接口变化?
(这个问题的目的是解决另一个问题提出的讨论。我有自己的意见,但在其他人的投票成为“胜利者”之前不会接受答案。)
没有找到相关结果
已邀请:
5 个回复
庞协腿宛炯
,
和
是不同的基本类型(6.2.5§14),因此不兼容(6.2.7§1),这也在第35页的脚注35中明确提到 所以是的,这显然是对编程接口的改变。 但是,如果
,
和
在C语言的任何理智实现中都具有相同的表示和对齐要求,二进制接口将保持不变。
辰炔诚薯
谷起
或(最好)
。你正在寻找的基本上是一个不透明的指针,这正是
所提供的。用户不需要了解有关实现内部的任何信息,并且由于任何其他指针类型将隐式转换为
,因此它是少数几种不会破坏任何现有代码的可能性之一。
勺的驴吓识
瓜唱鬼
和
的指针将是在调用约定中以完全相同的方式传递。