Manomissione della compilazione.

Considera la seguente situazione: sappiamo come utilizzare le direttive del preprocessore e vogliamo influenzare il processo di compilazione della libreria senza toccare nulla nel file della libreria. È possibile? Si è possibile. Un punto importante: questo trucco funziona solo nel file di intestazione (.h) della libreria, ovvero il file di implementazione .cpp molto probabilmente dovrai scartare il file. Se si definisce define prima di includere il file di libreria, questo define sarà "visibile" dal file di intestazione della libreria e può essere utilizzato per le istruzioni di compilazione condizionale. Un punto importante: quando si crea una libreria, non è consigliabile scrivere il codice esecutivo nel file di intestazione al di fuori della classe, perché ciò comporterà errori quando la libreria viene inclusa in file diversi. Per utilizzare la "magia delle definizioni", è necessario formattare correttamente l'implementazione nel file di intestazione, ad esempio:
Così è possibile .h
class testClass 
     public: 
          int func() 
          {
              return 5;
          } 
     private:
};

Così non è possibile.h
class testClass 
     public: 
          int func(); 
     private:
};

int testClass::func() 
     return 10;
}

Un esempio di come funziona un define, "adattandosi" a una libreria: 
File Pins.h
#pragma once
#include <Arduino.h>
void printResult() 
{
// se definito SEND_PINS
#ifdef SEND_PINS 
Serial.begin(9600); 
Serial.println("Pins");
#endif
}

File Pins.ino
// define SEND_PINS
// PRIMA di collegare la libreria
#define SEND_PINS
#include <Pins.h>
void setup() 
     // visualizzerà "Pins" se definito SEND_PINS 
     printResult();
}
void loop() 
{
}
Perché è necessario? La compilazione condizionale consente di controllare la compilazione del codice, ovvero di specificare rigidamente quali parti del codice verranno compilate e quali no.  
Crea il tuo sito web gratis! Questo sito è stato creato con Webnode. Crea il tuo sito gratuito oggi stesso! Inizia