3

可能重复:
C/C++:头文件中的静态函数,这是什么意思?
何时将静态函数定义放在 C 的头文件中?

在头文件中使用静态函数的优缺点是什么?

4

1 回答 1

3

假设您在头文件中实现它,每次包含您的头文件时,都会重复该功能。这意味着大量生成的二进制文件、糟糕的实践以及调试和维护的整体噩梦。

如果只是在header中定义,则需要在每个C文件中实现。

编辑

  • 如果它不在标头中,则您有一个具有给定名称的函数,多次实现,从而提供可能不同的行为。否则,不要将其设为静态并实施一次。拥有多个同名函数对维护者来说是一个陷阱(因此调试和维护地狱)
  • 静态函数和内联函数是不同的事情。静态函数是“语言环境”,而内联函数是“将被调用它们的主体替换”。在开销方面,调用标准函数或静态函数是相同的“性能代价”。

编辑 2 这是您可能遇到的陷阱

静态的.h

#ifndef _STATIC_H_
#define  _STATIC_H_
#include <stdio.h>

static void printer(void);
void nonStatic (void);

#endif

交流

#include "static.h"

static void printer(void)
{
    printf ("half the truth : 21\n");
}


int main (void) {
    printer();
    nonStatic();
}

公元前

#include <stdio.h>
#include "static.h"

static void printer (void)
{
    printf("Truth : 42\n");
}

void nonStatic(void)
{
    printf ("Non static\n");
    printer();
}

查看这段代码,您从 2 个不同的位置调用“打印机”,您会得到不同的行为:

D:\temp>gcc -o temp.exe a.c b.c && temp
half the truth : 21
Non static
Truth : 42

在这个小例子中很明显,当隐藏在一个大软件中时真的很棘手

于 2012-07-09T07:32:56.380 回答