c - 为什么 memset 采用 int 而不是 char?

标签 c memset

为什么 memsetint 作为第二个参数而不是 char,而 wmemset 将一个wchar_t 而不是像 longlong long 这样的东西?

最佳答案

memset 早于(相当多)将函数原型(prototype)添加到 C。没有原型(prototype),您不能传递 char 到一个函数——当/如果你尝试,当你传递它时它会被提升为 int,函数接收的是一个 int

还值得注意的是,在 C 中(但在 C++ 中不是)像 'a' 这样的字 rune 字具有 char 类型-- 它的类型为 int,因此您传递的内容通常无论如何都会以 int 开头。本质上,它以 char 开始并获得提升的唯一方法是传递 char 变量。

理论上,memset 可能会被修改,因此它接收一个 char 而不是 int,但不太可能有任何好处,并且很有可能破坏一些旧代码或其他代码。由于未知但可能相当高的成本,并且几乎没有任何真正好处的机会,我会说它被更改为接收 char 的机会恰好在“ slim ”和“没有”。

编辑(回应评论):intCHAR_BIT 最低有效位用作写入目标的值。

关于c - 为什么 memset 采用 int 而不是 char?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5919735/

相关文章:

c - 删除结构变量中的特殊字符

c - 使用 malloc 分配新内存后是否必须调用 memset

c - 为什么 memset 会输入错误的值?

c++ - 在 C++ 中处理字符串时如何使用 memset?

c++ - 这是将 struct sockaddr_in.sin_zero[8] 初始化为 0 的正确方法吗?

c - 警告 :0 flag ignored with precision and '%x' gnu_printf format

c - 首先输入一行文本时未检测到 EOF 字符?

c - 在socket编程c中,为什么我们使用memset将值0填充到结构体中?

c - 打印出文件中有多少个字母表中的每个字符。 - C

php - 无法使用 PHP 创建的管道写入 C 应用程序的 STDIN