Niektóre kompilatory obsługują także konstrukcję #pragma once, która zapobiega ponownemu załączeniu treści całego pliku, w którym została użyta. Metoda ta jednak nie ma oparcia w oficjalnym standardzie. Podobnie, jak wszystkie użycia dyrektywy #pragma, jej ewentualna obsługa jest rozszerzeniem wprowadzonym przez dany kompilator i nie jest przenośna pomiędzy różnymi narzędziami.
Zastosowanie w C++ Brak rozpoznawania składni języka przez preprocesor jest potencjalnym źródłem wielu błędów programistycznych. Z tego powodu w języku C++ dodano wiele elementów mających na celu jego zastąpienie. Część tych rozwiązań została też zaimplementowana w C.
Są to między innymi: Deklaracje stałych (poprzez słowo kluczowe języka const zamiast dyrektywy preprocesora #define) (również w C): const int foo = 5; Szablony (tylko C++): template <typename T> void swap(T &x, T &y) { T tmp = x; x = y; y = tmp; } Kompilacja warunkowa z constexpr zamiast makr #if (tylko C++; ): template <typename T> void printTypeInfo() { if constexpr (std::is_integral_v<T>) {