如何在 C 中使用前向声明?
How to use forward declaration in C?
我正在编写一个 C 程序,但我在 Stack Overflow 上找不到等效的示例。我有 2 个文件,level.h、lib.h,这取决于对方文件中定义的类型。这会生成错误 redefinition of typedef 'metalevel_t'/'entry_t' is a C11 feature
。
level.h:
#ifndef level_H
#define level_H
#include "lib.h"
// level.h
typedef struct metalevel metalevel_t;
// key value pairs, value are integers
typedef struct entry {
...
} entry_t;
lib.h:
typedef struct entry entry_t;
typedef struct metalevel{
entry_t* ...;
} metalevel_t;
metalevel_t Info[...];
但是,如果我用下面的内容替换 entry_t(和 metalevel_t),我会得到 typedef requires a name
个错误。
struct entry {
...
};
我的 Makefile 如下所示:
CC=gcc
CFLAGS=-I.
CFLAGS=-std=c99
LDFLAGS = -lm
macro_main: macro_main.o lsm.o lib.o level.o
$(CC) -o macro_main macro_main.o lsm.o lib.o level.o $(CFLAGS)
macro_main.o:
clean:
$(RM) macro_main
在这种情况下如何使用前向声明?
level.h:
#include "lib.h"
struct entry {
// ...
};
lib.h:
typedef struct entry entry_t;
typedef struct metalevel{
entry_t* p;
} metalevel_t;
不确定 metalevel_t Info[...];
是什么意思,这可能会导致 ...
的任何可能内容出错。
我正在编写一个 C 程序,但我在 Stack Overflow 上找不到等效的示例。我有 2 个文件,level.h、lib.h,这取决于对方文件中定义的类型。这会生成错误 redefinition of typedef 'metalevel_t'/'entry_t' is a C11 feature
。
level.h:
#ifndef level_H
#define level_H
#include "lib.h"
// level.h
typedef struct metalevel metalevel_t;
// key value pairs, value are integers
typedef struct entry {
...
} entry_t;
lib.h:
typedef struct entry entry_t;
typedef struct metalevel{
entry_t* ...;
} metalevel_t;
metalevel_t Info[...];
但是,如果我用下面的内容替换 entry_t(和 metalevel_t),我会得到 typedef requires a name
个错误。
struct entry {
...
};
我的 Makefile 如下所示:
CC=gcc
CFLAGS=-I.
CFLAGS=-std=c99
LDFLAGS = -lm
macro_main: macro_main.o lsm.o lib.o level.o
$(CC) -o macro_main macro_main.o lsm.o lib.o level.o $(CFLAGS)
macro_main.o:
clean:
$(RM) macro_main
在这种情况下如何使用前向声明?
level.h:
#include "lib.h"
struct entry {
// ...
};
lib.h:
typedef struct entry entry_t;
typedef struct metalevel{
entry_t* p;
} metalevel_t;
不确定 metalevel_t Info[...];
是什么意思,这可能会导致 ...
的任何可能内容出错。