I have the following files:
netfunc.h:
[CODE=c]typedef struct{
char data[MAX];
int n;
}packet;
typedef struct
{
char flag_s;
char address;
unsigned char control;
char data[MAX];
unsigned char FCS1;
unsigned char FCS2;
char flag_e;
}frame;
typedef struct{
frame trama;
packet paquete;
FILE* file;
int tty;
}arguments;
void to_physical_lay er(frame *fr, int fds);
void from_physical_l ayer(frame *fr, int fde);
void print_frame(fra me trama);
void format_frame(fr ame *fs, packet ps,int control);
void format_packet(f rame fs, packet *ps);
void to_network_laye r (packet pr, FILE *pfs);
[/CODE]
TX_automat_SW.h
[CODE=c]/* ----------------------------------------------------------- *
* Author: Luis Sieira García <email removed>
* Date: May 2007
* No rights reserved
* ----------------------------------------------------------- */
#include <IFTI_P2_automa t.h>
#define REACHED_EOF 3
/* ------------------------------------------------------------
* State definitions
* ------------------------------------------------------------ */
enum {
TX_STATE_INITIA L = AUTOMAT_INITIAL _STATE,
TX_STATE_READIN G,
TX_STATE_FRAMIN G,
TX_STATE_WAITIN G
};
/* ------------------------------------------------------------
* Event definitions
* ------------------------------------------------------------ */
enum {
TX_EV_OPERATIVE = 1,
TX_EV_READOK,
TX_EV_FRAMED,
TX_EV_TWOFRAMES ,
TX_EV_ACK_RECEI VED,
};
/* ------------------------------------------------------------
* Action definitions
* ------------------------------------------------------------ */
TAutomat * TX_automat_SW_d efine( );
int read_data( TEntity * inEntity,
TState inFromState,
TEvent inEvent,
TEventArgs * inArgs );
int manage_data( TEntity * inEntity,
TState inFromState,
TEvent inEvent,
TEventArgs * inArgs );
int send_data_wait_ response( TEntity * inEntity,
TState inFromState,
TEvent inEvent,
TEventArgs * inArgs );
[/CODE]
TX_SW
Manage the automat transitions, so it includes "TX_automat_SW. h".
It needs to use some functions from netfunc.h
If I don't include netfunc.h I get
[...]
src/TX_SW.c: In function ‘main’:
src/TX_SW.c:25: error: ‘arguments’ undeclared (first use in this function)
[...]
if I include both
#include <TX_automat_SW. h>
#include <netfunc.h>
then functions are not defined in TX_automat_SW
[...]
./src/TX_automat_SW.o : In function `manage_data':
src/TX_automat_SW.c :80: referencia a `format_frame' sin definir
[...]
As I think, solution is related with #ifndef #ifdef and #endif directives, but I've never used it... and I don't know how to do it...
netfunc.h:
[CODE=c]typedef struct{
char data[MAX];
int n;
}packet;
typedef struct
{
char flag_s;
char address;
unsigned char control;
char data[MAX];
unsigned char FCS1;
unsigned char FCS2;
char flag_e;
}frame;
typedef struct{
frame trama;
packet paquete;
FILE* file;
int tty;
}arguments;
void to_physical_lay er(frame *fr, int fds);
void from_physical_l ayer(frame *fr, int fde);
void print_frame(fra me trama);
void format_frame(fr ame *fs, packet ps,int control);
void format_packet(f rame fs, packet *ps);
void to_network_laye r (packet pr, FILE *pfs);
[/CODE]
TX_automat_SW.h
[CODE=c]/* ----------------------------------------------------------- *
* Author: Luis Sieira García <email removed>
* Date: May 2007
* No rights reserved
* ----------------------------------------------------------- */
#include <IFTI_P2_automa t.h>
#define REACHED_EOF 3
/* ------------------------------------------------------------
* State definitions
* ------------------------------------------------------------ */
enum {
TX_STATE_INITIA L = AUTOMAT_INITIAL _STATE,
TX_STATE_READIN G,
TX_STATE_FRAMIN G,
TX_STATE_WAITIN G
};
/* ------------------------------------------------------------
* Event definitions
* ------------------------------------------------------------ */
enum {
TX_EV_OPERATIVE = 1,
TX_EV_READOK,
TX_EV_FRAMED,
TX_EV_TWOFRAMES ,
TX_EV_ACK_RECEI VED,
};
/* ------------------------------------------------------------
* Action definitions
* ------------------------------------------------------------ */
TAutomat * TX_automat_SW_d efine( );
int read_data( TEntity * inEntity,
TState inFromState,
TEvent inEvent,
TEventArgs * inArgs );
int manage_data( TEntity * inEntity,
TState inFromState,
TEvent inEvent,
TEventArgs * inArgs );
int send_data_wait_ response( TEntity * inEntity,
TState inFromState,
TEvent inEvent,
TEventArgs * inArgs );
[/CODE]
TX_SW
Manage the automat transitions, so it includes "TX_automat_SW. h".
It needs to use some functions from netfunc.h
If I don't include netfunc.h I get
[...]
src/TX_SW.c: In function ‘main’:
src/TX_SW.c:25: error: ‘arguments’ undeclared (first use in this function)
[...]
if I include both
#include <TX_automat_SW. h>
#include <netfunc.h>
then functions are not defined in TX_automat_SW
[...]
./src/TX_automat_SW.o : In function `manage_data':
src/TX_automat_SW.c :80: referencia a `format_frame' sin definir
[...]
As I think, solution is related with #ifndef #ifdef and #endif directives, but I've never used it... and I don't know how to do it...
Comment