c - C 源文件中的外部结构

标签 c struct pthreads mutex extern

我试图在两个单独的 .c 文件中提供名为 dict_obj 的字典对象结构。这是在尝试为一个类编写 pthread TCP 服务器时的情况。我之前没有太多使用 C 语言,并且很难弄清楚这一点。我不确定我是否正确地将其声明为外部结构,因为 netbeans 在 clean 和 build 上抛出错误,指出未定义类型的无效使用。

在 db_functions.c 中我有:

//------------------------------------------------------------------------------
//                Server Function & Variable Initialization 
//------------------------------------------------------------------------------

struct dictionary_object dict_obj;


//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//                            Server Function Codes:
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------



//------------------------------------------------------------------------------
//                         Database Initialization
//------------------------------------------------------------------------------

int db_initialization()
{

    dict_obj.word_count = 0;
    return 1;

在 db_operations.c 中我有:

struct dictionary_object
{
    char dictionary[DICTIONARY_SIZE][WORD_LENGTH];
    int word_count;
    pthread_mutex_t dict_mutex;

};

extern struct dictionary_object dict_obj;

希望这能让你们充分了解我想要完成的任务,而不必用太多的代码让你们不知所措。提前致谢!如果您需要查看更多代码,请告诉我。

最佳答案

您需要在包含文件中定义一次结构内容和布局。还为那里的代码的所有函数和静态定义“外部”定义。在任何想要使用这些结构或定义的文件中,请包含头文件(例如 db_struct.h)。

db_struct.h:

struct dictionary_obhect {
   char dictionary ...
}
extern struct dictionary_object dict_obj;
extern int db_initialization();

db_struct.c:

#include "db_struct.h"

struct dictionary_object dict_obj;
int db_initiatilization() {
    dict_obc.word_count = 0;
}

请注意,这都是相当老式的 C 代码。现代 C++ 等有其他方法来做类似的事情。

关于c - C 源文件中的外部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13300060/

相关文章:

c++ - unsigned 关键字可以以非显而易见的方式使用吗?

c - 如何在 Linux 中使用 ioctl(原始分区)正确刷新磁盘缓存

c - 使用 qsort 函数对结构进行排序

C 编程 - 编译器告诉我我正在取消引用不完整的类型

c++ - *** 检测到 glibc *** free() : invalid pointer

java - 通过jni在java中存储pthread_t

c - 执行后维护pthread

c - SSE Intrinsics 算术错误

c - 链接期间 WINAPI 出现奇怪的错误

c - struct allocate C 表