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

C 在头文件中使用静态函数的优缺点是什么,c,function,static,C,Function,Static,可能重复: 在头文件中使用静态函数的优缺点是什么?假设您在头文件中实现它,每次包含头文件时,该函数都将被复制。这意味着需要调试和维护大量的二进制代码、糟糕的实践和总体噩梦 如果只是在头文件中定义它,则需要在每个C文件中实现它 编辑 如果它不在头中,则您有一个具有给定名称的函数,该函数实现了多次,因此提供了可能不同的行为。否则,不要将其设置为静态并实现一次。拥有多个同名函数是维护人员的一个陷阱(因此调试和维护地狱) 静态函数和内联函数是不同的事情。静态函数是“locale”,而内联函数是“被

可能重复:


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

假设您在头文件中实现它,每次包含头文件时,该函数都将被复制。这意味着需要调试和维护大量的二进制代码、糟糕的实践和总体噩梦

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

编辑

  • 如果它不在头中,则您有一个具有给定名称的函数,该函数实现了多次,因此提供了可能不同的行为。否则,不要将其设置为静态并实现一次。拥有多个同名函数是维护人员的一个陷阱(因此调试和维护地狱)
  • 静态函数和内联函数是不同的事情。静态函数是“locale”,而内联函数是“被调用它们的主体替换”。就开销而言,调用标准函数或静态函数是相同的“性能价格”
编辑2 这就是你可能遇到的陷阱

静态h

b、 c


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

在头文件中使用静态函数的例子?你介意展示一个你正在做的例子吗?这个问题有点过于宽泛。如果它没有在标题中实现呢?为什么这是一种不好的做法(您是否认为内联函数也是一种不好的做法)?为什么调试会很困难?您需要为您的语句提供参数。(并不是说他们错了)是的,回答有点快,但我不得不在标题中维护带有静态变量和函数的代码,这伤害了我的敏感感受:-)添加了一些参数,如果你认为我应该多加一点,请随意评论。尽管使用静态有好处,变量和函数都有。带有include-guard的头文件不会有您描述的问题。通常,如果您具备一定的专业知识,并且知道您正在做什么,则会有所收获(考虑使用相同的名称定义调试函数/变量,但使用一些神奇的文件宏,例如)。根据询问者的个人资料,我的回答是“可移植和可维护的代码”,而不是“代码大师”策略。
#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();
}
D:\temp>gcc -o temp.exe a.c b.c && temp
half the truth : 21
Non static
Truth : 42