Использование #define и #pragma в современных компиляторах отличается по своим целям и функциям:
Например, прагма once указывает компилятору, что данный заголовочный файл должен быть включён только один раз. 2 Оптимизационные прагмы позволяют настраивать процесс оптимизации для отдельных функций или участков кода. 2 Прагмы выравнивания управляют размещением данных в памяти. 2
Таким образом, основное отличие в том, что #define определяет макроопределения и константы, а #pragma — предоставляет компилятору дополнительные возможности по обработке кода.