PDA

View Full Version : [C] include "nome_file.c"


gianni.anz
22-09-2008, 21:40
Ciao ragazzi, ho un piccolo problema:

Non capisco!! Devo fare un piccolo prg,. in C. Bene, ho deciso di spezzarlo in tre parti. Nella prima parte ho il main, nella seconda ho il B e nella terza ho il prog C. Il main chiama il prg B. ok! il B e il main devono chiamare il C.

problema

# include "C.c" lo devo inserire nel main e nel B? o basto solo inserirlo nel main e nel B il riconoscimento è automatico? Oppure, se lo chiamo in B, lo posso anche chiudere, in qualche modo, in modo tale che sia sempre disponibile anche per altri prog?

Grazie

ndakota
22-09-2008, 22:06
non penso si possano includere file .c puoi al limite includere file .h dove sono presenti funzioni c e chiamare nel tuo programma codeste funzioni.. ciao

sebaldar
22-09-2008, 22:17
in linea di principio la direttiva del preprocessore #include sostituisce pari pari a questa riga il contenuto del file specificato, non importa di che file si tratti, in pratica viene utilizzato principalmente per includere i file header, quei file che contengano le intestazioni delle funzioni.
Dovresti riguardarti i primi capitoli del testo che stai utilizzato e comprendere la differenza tra file sorgente e file header che in C e C++ ha grande importanza.
ciao
sergio

gianni.anz
22-09-2008, 22:18
ndakota
fammi capire. Io dovrei chiamare in file .h all'interno del quale ci sono tutte le procedure che mi necessitano? quindi, nel file B e main mi chiamo il file .h e la procedura interessata? Ma gli .h non sono solo dei prototipi? quindi non posso creare in essi una procedura?

gianni.anz
22-09-2008, 22:22
sebaldar

Grazie Sergio. Mi hai 'tirato carne' insomma:p :D perchè non ho studiato!!

ndakota
22-09-2008, 22:40
esatto una situazione del genere.

file funzione.h

#include <stdio.h>

void stampa(void)
{
printf("ciao");
}


file main.c

#include "funzione.h"

int main(void)
{
stampa();

return 0;
}

gianni.anz
23-09-2008, 08:17
Ok ndakota
re-imposto tutto e seguo il tuo suggerimento, min sembra la cosa più logica da fare.

grazie

cionci
23-09-2008, 09:25
esatto una situazione del genere.

file funzione.h

#include <stdio.h>

void stampa(void)
{
printf("ciao");
}


file main.c

#include "funzione.h"

int main(void)
{
stampa();

return 0;
}

Questo non va bene. Solitamente non bisogna includere l'implementazione nel file .h, ma solo le dichiarazioni delle funzioni. Allora poteva includere anche il file .c ;)
La forma corretta è:


file funzione.h

#ifndef __FUNZIONE_H__
#define __FUNZIONE_H__

void stampa(void);

#endif


file funzione.c

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

void stampa(void)
{
printf("ciao");
}




file main.c

#include "funzione.h"

int main(void)
{
stampa();

return 0;
}

ndakota
23-09-2008, 16:25
ops sorry non lo sapevo a scuola mi hanno fatto sempre fare in quel modo :cry: :cry:

DanieleC88
23-09-2008, 17:59
ops sorry non lo sapevo a scuola mi hanno fatto sempre fare in quel modo :cry: :cry:
Malissimo! Metti questo caso: hai main.c, file1.c e header.h. Utilizzando quel metodo, definiamo in header.h:
int f(int x)
{
return (2 * x) + 3;
}
E in main.c e file1.c lo includiamo:
#include "header.h"

/* ... */

Che succede se lanci gcc -W -Wall main.c file1.c -o ./eseguibile?
/tmp/ccgO8xPX.o: In function `f':
file1.c:(.text+0x0): multiple definition of `f'
/tmp/cc8g7N9D.o:main.c:(.text+0x0): first defined here
E questo è ciò che succede con due file quasi vuoti. Pensa su progetti grossi... :Prrr: