// 2.x: funzionalita' del preprocessore
#include <iostream>
// Costanti
#define PROVA 3
const int prova(3);
// Macro
#define POTENZA(a) (a * a)
#define POTENZA2(a) ((a) * (a))
inline int potenza(int a) { return a * a; }
// Direttive #ifdef e compilazione condizionale
#define FLAG
const int flag(1);
int main() {
// Define e const
// ----------------
int a(PROVA);
int b(prova);
cout << "C: " << a << endl;
cout << "C++: " << b << endl;
// Macro e inline
// ----------------
// C-Style
cout << "C: " << POTENZA(a) << endl;
cout << "C: " << POTENZA(a + 1) << endl;
cout << "C: " << POTENZA2(a) << endl;
cout << "C: " << POTENZA2(a + 1) << endl;
// C++-Style
cout << "C++: " << potenza(a) << endl;
// Compilazione condizionale
// ---------------------------
// C-Style
#ifdef FLAG
cout << "C: Codice COMPILATO perche' FLAG e' definito!\n";
#endif
// C++-Style
if(flag) {
cout << "C++: Codice COMPILATO perche' flag e' diverso da 0!\n";
}
// Casi utili delle macro
// ------------------------
cout << "Questa riga e' la riga " << __LINE__ << " del file " << __FILE__ << endl;
}