我有两个头文件
A.h
struct A { ... };
function declarations which use A
B.h
function declarations which use the struct A here, and have functions which also use A.
However, I want to call "A" B here. How can I do this? I want all the
functions in here use
struct B, which I want to be exactly the same as struct A since
我想要的一个例子"要做,但使用定义,可能是错误的做事方式:(注意,它完全符合我的要求,但我不认为我应该使用定义为此目的,可能有一个更好的做事方式)
A.H
#ifndef A_H
#define A_H
struct A {int x;};
void A_DoSomething(struct A* a);
#endif
B.h
#ifndef B_H
#define B_H
#include "A.h"
#define B A
void B_DoSomething(struct* B b) { A_DoSomething(b); }
#endif
那么有没有办法在不使用define的情况下做我想做的事情?我想这样做,所以我可以重用代码。即,A是链表,B是堆栈。我可以从链表中完全定义我的堆栈数据结构。
编辑:所以基本上B和A是等价的,但对于我的B.h / B.c文件,以及任何使用B.h的文件,我只想调用结构" B"而不是" A"答案 0 :(得分:3)
我会使用typedef
并使用3个h文件将公共数据结构与A
和B
分开。类似的东西:
MyNode.h:
#ifndef MyNode_H
#define MyNode_H
typedef struct Node
{
void *data;
struct Node *next;
} Node;
#endif
A.H:
#ifndef A_H
#define A_H
#include "MyNode.h"
typedef Node A;
/* Declare functions for implementing a linked list using type A */
#endif
B.h:
#ifndef B_H
#define B_H
#include "MyNode.h"
typedef Node B;
/* Declare functions for implementing a stack using type B */
#endif
MAIN.C:
#include <stdio.h>
#include "A.h"
#include "B.h"
int main(void) {
/* Here A and B can be used as types, example: */
A list = {NULL, NULL};
B stack = {NULL, NULL};
return 0;
}