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

时间:2012-07-09 07:29:22

标签: c function static

  

可能重复:
  C/C++: Static function in header file, what does it mean?
  When to put static function definitions in header files in C?

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

1 个答案:

答案 0 :(得分:3)

假设您在头文件中实现它,每次包含头时,该函数都将被复制。这意味着更重的二进制,糟糕的做法以及调试和维护的整体噩梦。

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

修改

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

编辑2 这是你可以遇到的陷阱

static.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();
}

b.c

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

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

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

查看此代码,您从两个不同的位置调用“printer”,您会遇到不同的行为:

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

在这个小例子中显而易见,隐藏在一个大软件中真的很棘手