C: 如何声明返回非静态字符串的静态函数?

标签 c function-prototypes

如果函数声明为

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。由于 fn1fn2 都具有 static 链接,因此它们对于定义它们的翻译单元(大约是源文件)是私有(private)的。

关于C: 如何声明返回非静态字符串的静态函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28243423/

相关文章:

c - 运行 udev 时挂起

c - 在 fifo 中同时读取和写入(在后面)

c - postgres 连接池库

c - 修改数组的选择元素

c - 头文件中的函数原型(prototype)与定义不匹配,如何捕获?

python - Micropython - 如何在 C 中创建一个继承另一种也在 C 中定义的类型的类型?

c++ - "class prototypes"在 C++ 中可能吗?

c++ - 根据需求在 C++ 中定义函数原型(prototype)

c++ - 函数原型(prototype)未初始化的局部变量

c - 带有 void* 参数的函数原型(prototype)