Newsgroup: it.comp.lang.c
Titolo: path e include

Salve all'ng, avrei due domande per voi:
- Esistono funzioni della libreria standard(anche C++) che mi permettano di
manipolare i percorsi(come quelle del PHP o del Python) ?
- Se in un file include dichiaro una variabile di un tipo dichiarato in un
altro file include, ed in quest'ultimo dichiaro una variabile di un tipo
dichiarato nel precedente, come posso fare perchè la cosa funzioni?
grazie e ciao
--------------------------------
Inviato via 
http://usenet.libero.it

Non č buona programmazione dichiarare variabili di tipi all'interno di file
include, perchč quest ultimi contengono prototipi dichiarazioni di modelli
di strutture di costanti etc...
comunque per evitare conflitti di duplice dichiarazione causati
dal'inclusione di piů header, dovresti fare cosě:
nel file esempio.h:
#ifndef _ESEMPIO_H
   #define _ESEMPIO_H
   //
   // inclusione di altri header, prototipi etc...
   // concludi con:
#endif
stesso procedimento per gli altri headers creati da te.
Questa tecnica ti permette di evitare inclusioni multiple dei tuoi dati.
Oppure dovresti dichiarare la variabile come globale all'interno di un file
sorgente e poi per utilizzarla in altri file usi la seguente all'esterno
delle funzioni:
extern int esempio;
dove dopo extern segua la dichiarazione identica a quella in cui hai
dichiarato effettivamente la variabile.


 di strutture di costanti etc...
grazie per avermi risposto alterX, io però non intendevo l'inclusione
multipla, ma quella "incrociata". ad esempio metti che io abbia un
file chiamato "file1.h" dove stà scritto:
typedef struct
{
 int valore;
 char* stringa;
 Struttura2 s2;
}Struttura1;
mentre in file2.h:
typedef struct
{
 int val;
 char* str;
 Struttura1 s1;
}Struttura2;
Come vedi ogni struttura dichiara un campo di tipo dell'altra struttura, ma
in fase di
compilazione il primo file ad essere incluso solleva un errore dicendo che
non trova
dichiarata da nessuna parte l'altra struttura, come posso farli funzionare?
grazie


 }Struttura2;
Quello che vuoi fare e' IMPOSSIBILE!
Ti faccio un esempio: Se tu scrivi
Struttura1 mystruct;
Quello che succede e' che crei una istanza dell'oggetto struttur1 che dentro
di se contiene una istanza dell'oggetto struttura2. A sua volta tale
struttura contiene una istanza dell'oggetto struttura1 che a sua volta ha
una struttura 2 che a sua volta ha una struttura 1 e.... cosi' via per
sempre!!! Stai cercando di creare una struttura dati INFINITA!!!!
E' possibile fare una struttura che usa un'altra struttura, ma se questa
seconda struttura riusa la prima, la cosa non ha fine.... e si puo'
risolvere usando dei PUNTATORI.
In altre parole la struttura1 potrebbe contenere un puntatore alla
struttura2 e la struttura2 alla struttura1.
In questo modo se dichiaro :
Struttura1 mystruct; // Quello di prima
Questa volta ho SOLO 1 struttura che contiene un puntatore ad una seconda
struttura. Quando poi (con un malloc() ad esempio) allochero' dello spazio
per quel puntatore allora esso puntera' ad una istanza della senconda
struttura che avra' un puntatore alla prima. Ma... fino a che non io non
decido di allocare memoria per quel puntatore, anch'esso e' SOLO un
puntatore e .... la cosa ha una fine. Sono io che se voglio continuare ad
allocare riesco a farla per "sempre". In pratica il programmatore ha il
controllo.
Quando inizializzi la struttura e' bene inizializzare il puntatore che non
punta a nulla a NULL!
Spero di esserti stato di aiuto,
Tommy