Δημοσιεύτηκε: 19 Σεπ 2011, 19:23
από migf1
Garrus έγραψε:οκ πχ σε ενα προβλημα οπου απαιτουνται λιστες και κομβοι θα εγραφα:
program.c file
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include "lists.h"

int main(void){
//blah blah

}


lists.h file

Κώδικας: Επιλογή όλων
struct node{
// elements
}
struct node foo(){
//blah blah
}

...

Όχι, στο list.h δεν βάζουμε ορισμούς συναρτήσεων, μονάχα τα πρότυπά τους.

Π.χ...
Κώδικας: Επιλογή όλων

// ========================================================
// File: list.h
// ========================================================

/* Πρόσθετοι Τύποι Δεδομένων */

typedef struct list {
...
} List;

/* Πρότυπα Συναρτήσεων */

#ifndef _LIST_C_ // εξαίρεση από το: list.c
extern List *list_new( ... );
#endif

#ifndef _MAIN_C_ // εξαίρεση από το: main.c
extern void foo( ... );
#endif


Κώδικας: Επιλογή όλων

// ========================================================
// File: list.c
// ========================================================

#define _LIST_C_ // χρησιμοποιείται στο: list.h

#include "list.h"

List *list_new( ... ) // ορισμός της foo()
{
...
foo( ... ); // η foo() έχει οριστεί στο: main.c
}

Κώδικας: Επιλογή όλων

// ========================================================
// File: main.c
// ========================================================

#define _MAIN_C_ // χρησιμοποιείται στο: list.h

#include <stdio.h>
#include "list.h"

// ------------------------------------------------------------------------
void foo( ... ) // ορισμός της foo()
{
...
}
// ------------------------------------------------------------------------
int main( void )
{
List *list = NULL;

list = list_new( ... ); // η list_new() έχει οριστεί στο list.c
...
}