gpt4 book ai didi

c - 为什么 C 标准库忽略 const 的正确性?

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:42 26 4
gpt4 key购买 nike

查看 C 标准库中的大多数函数,似乎缺少 const,通常首选指定常量。

例如:
ctype.h/c

extern int isupper(int __c) __ATTR_CONST__;
extern int islower(int __c) __ATTR_CONST__;
extern int isdigit(int __c) __ATTR_CONST__;

为什么不是这些:

extern int isupper(const int __c) __ATTR_CONST__;
extern int islower(const int __c) __ATTR_CONST__;
extern int isdigit(const int __c) __ATTR_CONST__;

毕竟他们只观察参数:

int isupper(int c) {
return _pctype[c] & _UPPER;
}

int islower(int c) {
return _pctype[c] & _LOWER;
}

int isdigit(int c) {
return _pctype[c] & _DIGIT;
}

或者让我们在string.c中取一个函数:

void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;

while (count--)
*tmp++ = *s++;
return dest;
}

为什么不:

void *memcpy(void *const dest, const void *const src, size_t count);

const 被排除在这些地方是有原因的吗?
以我展示的方式包含 const 会不会是错误的?

我认为由于历史原因,功能一直保持这种状态,
但我想我应该问一下,以防我遗漏了什么。

最佳答案

那些常量正确的签名。

你几乎从不在传值参数前写 const。该函数有自己的副本,因此那里没有危险。

void *memcpy(void *dest, const void *src, size_t count)

也是 const 正确的。只有第二个指针 promise 不会改变它指向的内容。另一方面,目标指针就是改变它指向的内容。

关于c - 为什么 C 标准库忽略 const 的正确性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35696940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com