Наскоро научих как можем да използваме множество изходни файлове със заглавни файлове, за да направим кода преносим и йерархичен. За да направя това, се опитах да създам моята дървовидна програма, използвайки този принцип. Ето моите файлове
b_tree_ds.h – Това ще съдържа декларация на структура от данни на възел на дърво, което може да бъде извикано към различни функции, прилагащи различна функционалност на дървото (което може да е в различни изходни файлове)
typedef struct node {
struct node* left;
struct node* right;
int key; // contains value
}NODE;
Когато се опитам да добавя extern като в typedef extern struct node
, той дава грешка за множество класове за съхранение, но ако го пропусна, получавам грешка за множество дефиниции.
Ето другите ми изходни файлове
traverse.h - съдържа декларация на функцията traverse
void traverse_print (NODE* p);
Тук също получавам грешка за неизвестен идентификатор NODE
traverse.c - съдържа дефиниция на тази функция
#include <stdio.h>
#include "b_tree_ds.h"
#include "traverse.h"
void traverse_print(NODE* p)
{
if(p->left != NULL)
{
traverse_print(p->left);
}
if (p->right != NULL)
{
traverse_print(p->right);
}
printf ("\n%d",p->key);
}
Накрая main.c
#include <stdio.h>
#include "traverse.h"
void main()
{
// input
NODE p;
printf("\nInput the tree");
input_tree (&p);
printf("\n\nThe tree is traversing ...\n")
traverse_print(&p);
}
void input_tree (NODE *p)
{
int in;
int c;
NODE *temp;
printf("\n Enter the key value for p: ");
scanf("%d", &in);
p->key =in;
printf ("\n\nIn relation to node with value %d",in);
printf ("Does it have left child (Y/N): ")
if ((c = getchar()) == Y);
{
//assign new memory to it.
temp = (NODE *)malloc(sizeof(NODE));
input_tree(temp);
}
printf ("\n\nIn relation to node with value %d",p->key);
printf ("\nDoes it have right child (Y/N): ")
if ((c = getchar()) == Y);
{
//assign new memory to it.
temp = (NODE *)malloc(sizeof(NODE));
input_tree(temp);
}
}
Това е първият ми опит за такава практика, моля, предложете добре ли е структурирането на програмата ми или трябва да опитам нещо друго.
void main()
не е прав и че трябва да кажетеint main()
. - person Kerrek SB   schedule 17.03.2012