"静态"功能的原型

Mar*_*ark 12 c standards

我不太确定是否真的有必要在C中使用静态函数的原型.只要我不输出这些函数(即它们没有外部链接),这会带来什么其他好处?

谢谢.

Lun*_*din 8

引用某些权限,MISRA-C:2004规则8.1强制执行具有外部链接的函数的原型,但也提到了内部链接:

"为具有内部联系的功能提供原型是良好的编程实践."

我认为这是一种很好的做法,因为它使得内部/外部链接功能之间的编码风格保持一致.正如其他人在答案中提到的那样,它也很方便.


asa*_*elr 6

如果你想在实现之前使用它们,你应该编写一个原型.

通常,您可以更改函数的顺序,但如果您有2个静态函数,那么相互调用会怎么样?


glg*_*lgl 6

例如,如果您需要确保函数具有某种类型,那么它可能很有用.

考虑一下:

// Define how the functions should be defined.
typedef void * jobfunc(void *);

// Use case
void addjob(jobfunc *);

// Ensure they have the right type. Without this, you only get a warning
// for addjob(job2) (see below) - with it, you get an error for the mismatch.
static jobfunc job1;
static jobfunc job2;

// Define one job
static void * job1(void * arg) {
    return NULL;
}

// Define another job - accidentally wrong.
static void * job2(int accidentally_wrong) {
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为使用typedef作为某种功能模板是相当模糊的做法,它很可能只会让读者感到困惑.例如,我花了一些时间来解释你的代码实际上做了什么.我对代码的直接但不正确的反应是"aha - 函数指针". (4认同)