如果函数声明为
static char *function(...) { ... }
这是一个返回static char *
的非静态函数,还是返回一个非static char *
的静态函数?
比较以下两个函数。哪一个是正确的用法?
static char *fn1(void)
{
static char s[] = "hello";
return s;
}
static char *fn2(void)
{
char *s = malloc(6);
strcpy(s, "world");
return s;
}
最佳答案
static
适用于函数,而不是其返回类型。这两个函数都是正确的——不同之处在于 s
将在第一次调用 fn1
时初始化一次,而所有对 fn1
的调用都会分享s
;而在 fn2
中,每次调用都会分配一个新的 s
。由于 fn1
和 fn2
都具有 static
链接,因此它们对于定义它们的翻译单元(大约是源文件)是私有(private)的。
关于C: 如何声明返回非静态字符串的静态函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28243423/