重用C代码,给struct多个名字

时间:2016-11-11 04:54:58

标签: c

我有两个头文件

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"

1 个答案:

答案 0 :(得分:3)

我会使用typedef并使用3个h文件将公共数据结构与AB分开。类似的东西:

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;
}