Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Perch? per ogni et? c'? un sogno che muore, O uno che viene alla luce.

Arthur O'Shaugnessy 

Sondaggio:

Windows XP ?...

Un grande affare
Il Sistema Operativo migliore sul mercato
Bello, ma niente di eccezionale
L'ennesima fregatura Microsoft
Una ciofeca peggiore dei suoi predecessori
Preferisco non commentare...

visualizza risultati


 

File header

Purtroppo non esiste un meccanismo analogo alla keyword static per forzare un linkage esterno, d'altronde i nomi di tipo non hanno linkage (e devono essere consistenti) e le funzioni inline non possono avere linkage esterno per ragioni pratiche (la compilazione e` legata al singolo file sorgente). Esiste tuttavia un modo per aggirare l'ostacolo: racchiudere tali dichiarazioni e/o definizioni in un file header (file solitamente con estensione .h) e poi includere questo nei files che utilizzano tali dichiarazioni; possiamo anche inserire dichiarazioni e/o definizioni comuni in modo da non doverle ripetere.
Vediamo come procedere. Supponiamo di avere un certo numero di file che devono condividere delle costanti, delle definizioni di tipo e delle funzioni inline; quello che dobbiamo fare e` creare un file contenente tutte queste definizioni:

 

// Esempio.h
enum Color { Red, Green, Blue };
struct Point {
  float X;
  float Y;
};

const int Max = 1000;

inline int Sum(int x, int y) {
  return x + y;
}

 

A questo punto basta utilizzare la direttiva #include "NomeFile" nei moduli che utilizzano le precedenti definizioni:

 

// Modulo1.cpp
#include "Esempio.h"

/* codice modulo */

 

La direttiva #include e` gestita dal precompilatore che e` un programma che esegue delle manipolazioni sul file prima che questo sia compilato; nel nostro caso la direttiva dice di copiare il contenuto del file specificato nel file che vogliamo compilare e passare quindi al compilatore il risultato dell'operazione.
In alcuni esempi abbiamo gia` utilizzato la direttiva per poter eseguire input/output, in quei casi abbiamo utilizzato le parentesi angolari (< >) al posto dei doppi apici (" "); la differenza e` che utilizzando i doppi apici dobbiamo specificare (se necessario) il path in cui si trova il file header, con le parentesi angolari invece il preprocessore cerca il file in un insieme di directory predefinite.
Si noti inoltre che questa volta e` stato specificato l'estensione del file (.h), questo non dipende dall'uso degli apici, ma dal fatto che ad essere incluso e` l'header di un file di libreria (ad esempio quando si usa la libreria iostream), infatti in teoria tali header potrebbero non essere memorizzati in un normale file.

Un file header puo` contenere in generale qualsiasi istruzione C/C++ (in particolare anche dichiarazioni extern) da condividere tra piu` moduli:

 

// Esempio2.h

// Un header puo` includere un altro header
#include "Header1.h"

// o dichiarazioni extern comuni ai moduli
extern "C" {               // Inclusione di un
  #include "HeaderC.h"     // file header C
}
extern "C" {
  int CFunc1(int, float);
  void CFunc2(char*);
}
extern int a;
extern double* Ptr;
extern void Func();

 

 

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2019 Cataldo Sasso