Предполагая, что у меня есть файл A. c и файл B. c, я хотел бы переместить общий код в файл common.h и общий файл. c.
Файл A. c
typedef struct mystruct {
long long nameA; <--- different member
struct astruct *next;
} MYSTRUC;
void free_table(MYSTRUC** tab) { <--- same code in A.c and B.c
int i;
MYSTRUC* current;
MYSTRUC* tmp;
for (i = 0; i < TSIZE; i++) {
current = tab[i];
while (current != NULL) {
tmp = current;
current = current->next;
free(tmp);
}
}
free(tab);
}
MYSTRUC** inittable() {
int i;
MYSTRUC **tab;
ht = (MYSTRUC**) malloc( sizeof(MYSTRUC*) * TSIZE );
for (i = 0; i < TSIZE; i++) tab[i] = (MYSTRUC*) NULL;
return tab;
}
void otherA2() {uses nameA}
Файл B. c
typedef struct mystruct {
long long nameB; <---- different member
struct bstruct *next;
} MYSTRUC;
void free_table(MYSTRUC** tab) { <--- same code in A.c and B.c
int i;
MYSTRUC* current;
MYSTRUC* tmp;
for (i = 0; i < TSIZE; i++) {
current = tab[i];
while (current != NULL) {
tmp = current;
current = current->next;
free(tmp);
}
}
free(tab);
}
MYSTRUC** inittable() {
int i;
MYSTRUC **tab;
ht = (MYSTRUC**) malloc( sizeof(MYSTRUC*) * TSIZE );
for (i = 0; i < TSIZE; i++) tab[i] = (MYSTRUC*) NULL;
return tab;
}
void otherB2() {uses nameB}
Если я поставлю объявление free_table () в common.h компилятор будет жаловаться на неизвестный тип MYSTRU C. Я могу создать файлы Ah и Bh и переместить туда MYSTRU C (из A. c) и MYSTRU C (из B. c). Но это не решит мою проблему. Версия STRUCT из второго заголовка будет охватывать версию из первого заголовка.
File common.h
#include "A.h" <--- wrong
#include "B.h" <--- wrong
void free_table(MYSTRUC** str){ <--- same code in A.c and B.c
....
}
Как мне решить эту ситуацию? Возможно ли это сделать без шаблонов?