Le guardie di inclusione

Tutti i file di intestazione (*.h) devono avere una guardia di inclusione per evitare errori dovute ad inclusioni multiple dello stesso file.

La guardia di inclusione dovrebbe comparire subito prima del commento di intestazione e comprendere l'intero contenuto del file.

Esempio:

#ifndef _FOOBAR_H
#define _FOOBAR_H  
 . . .   codice sorgente   . . .
#endif  // _FOOBAR_H

I file di intestazione (header)

Il file di intestazione di una classe C++, dovrebbe includere solamente i file header che sono necessari per la definizione della classe. Più precisamente un file header dovrebbe essere incluso solo se:

  • fornisce la definizione della classe base
  • contine le definizioni delle classi a cui fanno riferimenti i dati mebri o i metodi della classe.

Puntatori e reference ad oggetti, non richiedono l'inclusione dell'header con la definizione dell'oggetto corrispondente, ma è sufficiente sfruttare la dichiarazione anticipata della classe (forward class declaration).

Dichiarazione anticipata di una classe

La dichiarazione anticipata dovrebbe essere utilizzata al posto dell'inclusione di file di intestazione per le classi che sono riferite tramite puntatori o riferimenti. Ad esempio se un metodo ha come parametro CFoo*, è sufficiente utilizzare una dichiarazione anticipata della classe CFoo per compilare il file senza ricevere errori. Questa possibilità aiuta a mantenere "leggera" l'interfaccia di un oggetto, cosí che gli utilizzatori di tale interfaccia non sono sottoposti ad inutili dipendenze.

L'utilizzo di dichiarazioni anticipate è anche un buona pratica di sicurezza, poiché elimina la necessità di esporre inutilmente tutti i sorgenti al codice "client".

Example:

 

// includes 
//------------------------------
#include “foobarbase.h”
#include “someclass.h”

// forward declarations
//------------------------------
class COtherClass;

class CFooBar : public CFooBarBase {
public :
      CSomeClass     m_SomeClass;
      COtherClass *  m_pOtherClass;
};

Quando si deve lavorare con un progetto molto esteso, formato da decine di file sorgente, la compilazione ed il collegamento dei vari moduli può diventare un'operazione molto laboriosa, specialmente se si vuole evitare che siano ricompilati i file sorgenti che non sono stati modificati. Questo articolo mostra l'utilizzo del programma di utilità make che consente di gestire agevolmente questo genere di situazioni. Prosegue...


SQLite SQLite è una libreria software scritta in linguaggio C che implementa un DBMS SQL; essendo una libreria, non è un processo standalone utilizzabile di per sé, ma può essere linkato all'interno di un altro programma. È utilizzabile con linguaggio C/C++ ed esistono binding anche per altri linguaggi, quali Tcl, php e la piattaforma .Net

Prosegue...

Azionamento elettricoL'azionamento elettrico è un dispositivo che converte l'energia elettrica che riceve in ingresso, in energia meccanica. Tale conversione è guidata da un segnale di comando, che modulo l'uscita e consente di pilotare il motore collegato.

Nel controllo dell'azionamento è impostato il movimento da inseguire e lo stadio di controllo genera un segnale di riferimento utilizzato per pilotare il motore.

Contemporaneamente il controllore riceve dal motore le informazioni sul movimento realmente effettuato dal motore (segnale di retroazione) e le confronta con il movimento desiderato. Se i due segnali, set point e segnale retroazionato, differiscono, il controllore modifica il segnale di riferimento in modo tale da far seguire al motore elettrico il movimento desiderato.

Poiché il segnale di comando è a bassa potenza, prima di essere inviato al motore viene opportunamente amplificato da uno stadio di potenza e successivamente utilizzato per alimentare il motore elettrico.

logo_xml L’Extensible Markup Language (XML) è un metalinguaggio che permette di creare dei linguaggi personalizzati di markup; nasce dall’esigenza di portare nel World Wide Web lo Standard Generalized Markup Language (SGML), lo standard internazionale per la descrizione della struttura e del contenuto di documenti elettronici di qualsiasi tipo; ne contiene quindi tutta la potenza, ma non tutte le complesse funzioni raramente utilizzate.

Si caratterizza per la semplicità con cui è possibile scrivere documenti, condividerli e trasmetterli nel Web.

Prosegue...

Calendario

<<  febbraio 2012  >>
lumamegivesado
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

View posts in large calendar

Archivio

Licenza d'uso
Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati mediante:

Licenza Creative Common