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

标签 c function static

<分区>

Possible Duplicate:
C/C++: Static function in header file, what does it mean?
When to put static function definitions in header files in C?

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

最佳答案

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

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

编辑

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

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

static.h

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

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

#endif

a.c

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

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

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

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

关于c - 在头文件中使用静态函数的优缺点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11390702/

相关文章:

c - 初始化字符数组时出错

c# - 从另一个 userControl c# 访问 userControl 上的对象

ios - 在 Swift 中,如何编写一个函数在完成后触发另一个函数?

javascript - 编写一个函数,它接受一个字符串并返回一个新字符串,其中只有大写字母传递给该字符串

javascript - 导出对象与函数 NodeJs

c# - 使用 threadstatic 静态字段模拟函数静态变量?

c# - 我引用了一个常量类静态变量,但是当我这样做时,值会以某种方式改变

C 写入意外字符

c - 排除代码段陷入循环的原因

c - 从 EFS 读取的压缩结构给出了奇怪的结果