【发布时间】:2018-05-15 09:06:07
【问题描述】:
我正在学习静态函数,如果我将函数声明为 一个静态函数,然后我无法将此函数访问到其他 c 文件中,如果我尝试访问,那么应该有一个错误“undefined reference to `fun” 所以我在 add.c 和 add.h 文件中声明并定义静态函数并将该函数调用到 main.c 文件中,但我得到不同的错误,即“'fun'的静态声明遵循非静态声明"强文本 所以我的问题是为什么会出现这个错误???? 请原谅我的英语不好!!!!
/************** main.c****************/
#include <stdio.h>
#include <stdlib.h>
#include "add.h"
int main(void)
{
printf("%d ", fun());
printf("%d ", fun());
return 0;
}
/***************add.c*************/
#include <stdio.h>
#include "add.h"
static int fun(void)
{
int a=5,b=4;
return a+b;
}
/*********************add.h*************/
#ifndef ADD_H_
#define ADD_H_
static int fun(void);
#endif /* ADD_H_ */
【问题讨论】:
-
由于静态函数是文件本地的,所以将静态函数声明放在头文件中是没有意义的。在这种情况下,如果您想从
main.c调用它,则不能将add.c中的fun设为静态。不同的文件,对吧?所以决定:(a)静态,仅一个文件,不在头文件中,或(b)非静态,在头文件中,可从任何文件调用。选择。 -
嘿,汤姆,感谢您理解这一点!!!!
-
我很想重新打开这个问题,因为它不是声称的原件的副本。这个问题询问为什么 OP 会收到一条错误消息,指出“函数的静态声明遵循非静态声明”,而这在原文中没有解释。但是,问题中的代码似乎不应该生成该消息,因此代码和问题之间可能存在不匹配。该问题应该以不同的原因得到澄清或结束,例如不再可重复或不清楚您在问什么。
标签: c static-functions