【发布时间】:2012-08-27 17:35:00
【问题描述】:
今天早些时候,我浏览了各种头文件,只是为了将它们与我正在制作的头文件进行比较,并注意到它们似乎声明它们的功能有点不同。
例如这里是来自string.h 的strlen 的声明:
extern size_t __cdecl strlen(const char *);
在做一些研究后,我发现extern 用于在功能块之外声明一个变量。最好在头文件中使用extern 声明我的函数吗?
我看到他们使用size_t,这里是unsigned long long,而不是int,我假设这是因为它更有效有几个原因(例如,字符串的长度永远不会是负数) 但这是他们在这里使用size_t 的原因吗?还是我完全没有抓住重点?
最后我看到了__cdecl,我找不到太多信息。 __cdecl 到底是什么?我也应该使用它吗?
最后,我注意到在这个声明中没有变量名用于传递给strlen 的争论。我猜这是因为这不是一个函数原型,只是一个声明,而原型在别处。为什么没有变量名,例如strlen(const char *str) 在声明中?
我的最后一个问题是,如果这只是一个声明,strlen 的函数原型会是什么样子?我的猜测是这样的:
size_t strlen(const char *str)
我只是问,因为我想学习和改进我的代码(假设我在 C 文件中制作函数原型/声明,然后只是在头文件中声明函数,以便其他 C 文件可以使用它们)。
【问题讨论】: