gpt4 book ai didi

c - 这些函数和参数注释是什么?

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

busybox 的源代码syslogd implementation包含一些我不熟悉的注释。语言是 C,而不是 C++。

int syslogd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int syslogd_main(int argc UNUSED_PARAM, char **argv)

具体来说,MAIN_EXTERNALY_VISIBLEUNUSED_PARAM

  1. 这些注释到底在做什么?我在哪里可以阅读更多关于它们和其他注释的信息?
  2. 这些是 C 标准的一部分,还是编译器扩展?如果它们是编译器扩展,它们得到的支持有多广泛?
  3. 我假设第一个原因是为什么这个文件没有 main() 函数。如果这些是编译器扩展而不是标准的一部分,这是否意味着此文件不能由仅遵守 C 标准的编译器按原样有意义地编译?
  4. 为什么他们在完整定义之前立即声明 syslogd_main 函数的原型(prototype)? MAIN_EXTERNALY_VISIBLE 注解只能应用于函数原型(prototype)吗?

最佳答案

1. What exactly are these annotations doing?

参见 include/platform.hinclude/libbb.h

UNUSED_PARAM 扩展为 __attribute__ ((__unused__))。它将变量(在您的示例中为 argc)指定为“可能未使用”并禁用“未使用变量”警告。

来自 GCC 手册 [指定变量的属性]:

unused This attribute, attached to a variable, means that the variable is meant to be possibly unused. GCC will not produce a warning for this variable.

MAIN_EXTERNALY_VISIBLE 扩展为 EXTERNALY_VISIBLE,然后扩展为 __attribute__(( visibility("default") ))。它控制函数的可见性。

来自 GCC 手册 [声明函数的属性]:

... On ELF, default visibility means that the declaration is visible to other modules and, in shared libraries, means that the declared entity may be overridden.

来自 include/libbb.h :

/* We need to export XXX_main from libbusybox
* only if we build "individual" binaries
*/
#if ENABLE_FEATURE_INDIVIDUAL
#define MAIN_EXTERNALLY_VISIBLE EXTERNALLY_VISIBLE
#else
#define MAIN_EXTERNALLY_VISIBLE
#endif

2. Are these part of the C standard, or ...?

不,那些是 BusyBox 项目中定义的宏。

3. I assume the first one is why this file doesn't have a main() function. ...

没有。 BusyBox 将许多实用程序组合到一个可执行文件中。这解释了 syslogd.c 中“缺少 main() 函数”。

4. Why did they declare a prototype of the syslogd_main function immediately before the full definition? ...

来自 GCC 手册 [声明函数的属性]:

The keyword __attribute__ allows you to specify special attributes when making a declaration.

关于c - 这些函数和参数注释是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43331419/

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