Dyrektywy preprocesora pozwalają na ukrywanie różnic między różnymi architekturami procesorów, systemami operacyjnymi, kompilatorami a nawet samymi standardami języka. Popularnym zastosowaniem jest też tworzenie uniwersalnych nagłówków dla bibliotek C, które mogą być wstawione bezpośrednio do kodu C i C++. W przypadku tego pierwszego preprocesor wytnie konstrukcję extern.

#ifdef __cplusplus extern "C" { #endif

/* Definicje */

#ifdef __cplusplus } #endif

Innym zastosowaniem jest zabezpieczenie plików nagłówkowych przed wielokrotnym dołączaniem do tego samego projektu. Jeżeli treść pliku nagłówkowego nazwa.h obejmie się instrukcjami:

#ifndef _NAZWA_H_ /* (1) */ #define _NAZWA_H_ /* (2) */

/* Definicje */

#endif /* (3) */

to przy pierwszej próbie dołączenia pliku, kompilator najpierw sprawdzi, czy zdefiniowano stałą _NAZWA_H_ (może ona mieć dowolną nazwę, ten sposób jest jednak dobrym zwyczajem promowanym przez programistów) (1) - jeżeli nie, zostanie ona zdefiniowana (2) i do programu zostanie dołączona treść między (2) i (3), oznaczający koniec części dodawanej tylko przy spełnieniu warunku (1).