gpt4 book ai didi

c - C 中的函数原型(prototype)

转载 作者:行者123 更新时间:2023-12-02 18:21:47 27 4
gpt4 key购买 nike

今天早些时候,我查看了各种头文件,只是为了将它们与我正在制作的头文件进行比较,并注意到它们声明其函数的方式似乎有点不同。

例如,这里是 string.hstrlen 的声明:

extern size_t __cdecl strlen(const char *);

经过一些研究,我发现 extern 用于在功能 block 外部声明变量。在头文件中也使用 extern 声明我的函数是最佳实践吗?

我看到他们在这里使用 size_t ,它是 unsigned long long 而不是 int,我假设这是因为它更出于多种原因(例如字符串的长度永远不会是负数)而高效,但这就是他们在这里使用 size_t 的原因吗?还是我完全没有捕获重点?

最后我看到了 __cdecl ,但我找不到太多信息。 __cdecl 到底是什么?我也应该使用它吗?

最后,我注意到在此声明中没有传递给 strlen 的争论的变量名称。我猜测这样做的原因是这不是函数原型(prototype),只是一个声明,而原型(prototype)在其他地方。为什么没有变量名称,例如strlen(const char *str) 在声明中?

我的最后一个问题是,如果这只是一个声明,strlen 的函数原型(prototype)会是什么样子?我的猜测是这样的:

size_t strlen(const char *str)

我只是问,因为我想学习和改进我的代码(假设我在 C 文件中制作函数原型(prototype)/声明,然后只是在头文件中声明函数,以便其他 C 文件可以使用它们)。

最佳答案

  1. size_tstrlen 的返回值,而不是 int
  2. __cdecl 是函数的调用约定。这意味着谁为参数、返回值等设置了堆栈以及谁清除了它。更多引用:Calling convention
  3. 在声明函数时,您实际上并不需要参数名称。只需参数类型就足够了。

更新extern:

  • extern 告诉编译器该语句只是声明而不是定义。因此,对于函数原型(prototype),extern 不会添加任何值,因为它只是一个定义。引用:C Extern

希望这有帮助。

关于c - C 中的函数原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12146718/

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