【发布时间】:2018-08-23 12:21:10
【问题描述】:
首先,我搜索了错误并阅读了以下答案:
- I don't understand why compiler is giving me error with this code
- C : Warning about visibility of a struct
但是他们都没有帮助我,所以我们在这里。
问题存在于这两个结构之间,prx_data_s 存储通用数据,prx_ops_s 定义指向将使用该数据的函数的指针。
我将简化示例的来源:
prx_data.h
#ifndef PRX_EXAMPLE_DATA_H
#define PRX_EXAMPLE_DATA_H
#include "prx_ops.h"
struct prx_data_s {
enum prx_op_t op;
char *keyquery;
};
char *get_query(struct prx_data_s *dt);
#endif
prx_data.c
#include "prx_data.h"
char *get_query(struct prx_data_s *dt)
{
return dt->keyquery;
}
prx_ops.h
#ifndef PRX_EXAMPLE_OPS_H
#define PRX_EXAMPLE_OPS_H
#include "prx_data.h"
enum prx_op_t {
PRX_EXAMPLE_OP = 2
};
struct prx_ops_s {
int (*dec) (struct prx_data_s *);
};
#endif
我正在尝试使用以下示例编译对象:
clang -c prx_data.c -o prx_data.o -std=c11 -g -Wall
这是输出错误:
In file included from prx_data.c:1:
In file included from ./prx_data.h:4:
./prx_ops.h:11:24: warning: declaration of 'struct prx_data_s' will not be visible outside of this function [-Wvisibility]
int (*dec) (struct prx_data_s *);
^
欢迎大家帮忙,谢谢:)
【问题讨论】:
-
您有一个循环包含图 - prx_ops 包含 prx_data,反之亦然。尽管包含守卫打破了任何无限循环,但在您的示例中,首先读取 ops 标头,从而导致结构的前向声明。
-
哦,我不知道循环依赖是一回事,这是有道理的。谢谢@TypeIA!
-
一般来说,正如你所发现的,你不应该在头文件中定义函数
标签: c