在查看从AIX迁移到Cygwin64位的C代码时,我遇到了以下代码片段。在“#ifndef”指令中只写“static”对我来说没有意义。由于没有可用的文档或帮助,我在这里寻求帮助以理解此代码的含义。有人能解释一下代码是否有效吗?如果有效,为什么?它看起来可以编译并运行,但是“静态”在这里会有什么影响呢?
#ifndef __CYGWIN__
#define __CYGWIN__
static const char ccm_version[] = "%%%CCM_VERSION: %full_filespec: %%%"; /*#006#*/
#ifdef __CYGWIN__
static
#endif
void somefunc(void);
void somefunc(void) {
printf("%s \n", ccm_version);
} /*#006#*/
我在Windows 11 Pro和gcc(GCC)11.3.0上使用Cygwin 64位
1条答案
按热度按时间laik7k3q1#
它是有效的,如果定义了
__CYGWIN__
,代码将static
应用于函数原型:static void somefunc(void);
。所以它等价于:让一个函数声明紧跟在相应的函数定义之后是相当没有意义的……他们也可以将
static
存储说明符直接应用于函数定义。至于这对这里有什么好处,没有一些背景,我不能肯定地说。创建一个函数
static
将给予它一个内部链接,并限制其他翻译单元的访问。这样做的原因可能是私有封装,解决多标识符链接器问题,进行一些本地单元测试,鼓励函数内联等。我不知道为什么在这里使用它,尽管在代码生成期间鼓励内联似乎是可能的。