2014-12-04 30 views
-2

我想把一个c程序分解成两个不同的文件。我正在使用静态函数,我想知道这将如何影响我转换到两个文件。我希望我的所有功能都在一个文件中,而所有的功能都在另一个文件中。我需要做什么来使用静态函数是两个不同的文件?多个文件中的静态函数

+1

您是否考虑过不使用静态函数? – 2014-12-04 01:32:56

+2

静态函数具有“内部链接” - 它们保留在它们声明的文件中。您可以在多个文件中定义相同的静态函数,但更好的解决方案取决于问题的细节。 – Praxeolitic 2014-12-04 01:33:05

+0

似乎没有人提到过,在将C文件包括到另一个C文件中没有任何问题。我这样做是为了在特定环境下保持静态功能,同时保持文件大小的可管理性。 (如果你不喜欢这个,那么这是一个宗教论证,而不是编程问题。) – carveone 2015-07-12 11:26:41

回答

0

C中静态函数的链接只在一个文件中,所以你可以调用不同源文件中的静态函数。 所以,你可能需要这个

在交流转换器,其会调用函数吧

int bar(); /*declaration the function type*/ 
void foo(){bar();} /* just call it*/ 
1

静态

int bar(){return 1;} 

INT b.c指无形的其他文件。请学习基础知识。

+0

我认为这就是我在做的事 – user124249 2014-12-04 06:11:02

+0

C中的静态函数和C++中的静态成员函数之间有很大的区别。在C中,一个静态函数在其翻译单元之外是不可见的,这是它被编译到的目标文件。换句话说,制作一个静态函数限制了它的范围。你可以将一个静态函数想象为对它的* .c文件“私有”(尽管这不是严格正确的)。 – user124249 2014-12-04 06:19:15

+0

在C++中,“static”适用于类的成员函数和数据成员。静态数据成员也称为“类变量”,而非静态数据成员是“实例变量”。这是Smalltalk术语。这意味着只有一个静态数据成员的副本由一个类的所有对象共享,而每个对象都有自己的非静态数据成员副本。所以一个静态数据成员本质上是一个全局变量,它是一个类的成员。 – user124249 2014-12-04 06:19:35

0

最健壮的解决方案是首先在头文件中声明'全局可见'函数,然后将此头文件包含在定义或引用该函数的所有函数中。


app.h:

#ifndef _APP_H //why this? left as an excercise for the reader ;-) 
#define _APP_H 
... 
//declare fun() 
extern int fun(char * strArg); 
... 
#endif 

def.c:

#include "app.h" 
//define fun() 
int fun(char * strArg) 
{ 
    .... 
} 

ref.c:

#include "app.h" 
.... 
//reference fun() 
int ret = fun("this is a test"); 
.... 

==========

通过这种方式,您可以确保对fun()的所有引用正确调用它。 如果您碰巧以任何方式更改fun(),或者错误地调用它, 编译器会告诉您需要完成所有更改/修复的位置。

在任何情况下,如果您想要在特定源文件之外显示任何内容,最好不要使用“静态”属性。 ,因为静态属性的目的是使任何静态不可见的源文件外部。

========