gpt4 book ai didi

c - 在 C 中 _Nonnull 是通用的,还是某种编译器扩展/c99 功能?

转载 作者:行者123 更新时间:2023-11-30 20:07:48 24 4
gpt4 key购买 nike

const char *const _Nonnull GetString() {
...
}

这是跨平台的吗?或者 _Nonnull 是编译器扩展还是 c99 功能?

最佳答案

_Nonnull 是供应商扩展

_Nonnull token 不是跨平台的,也不是标准的。 Apple 曾在其 ObjectiveC 编译器中使用它来触发对声明为 _Nonnull 的变量进行额外的编译时检查。该语言的更现代版本已将此宏升级为一流关键字。

在这种使用中,我相信编译器将确保该函数不会显式返回 NULL 指针值。 (不过,这并不完美,因为代码总是会滥用指针算术在运行时返回 NULL,这是编译器无法检测到的)

我从未见过它在标准 C 中使用过,只在旧的 ObjectiveC 中见过。

函数参数的 C99 等效项

对于 C99,static 关键字可用于强制函数输入非 NULL,尽管语法会让您想知道发生了什么:

int processNonNullString(char myString[static 1])
{
/* ... */
}

在数组大小 (1) 之前使用 static,告诉编译器“myString”是至少一个元素的字符数组。请记住,在 C 中数组是指针,因此此限制排除了指针为空的可能性。

关于c - 在 C 中 _Nonnull 是通用的,还是某种编译器扩展/c99 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029927/

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