define полезная штука и её не обязательно использовать так как ты (лично я не вижу смысла использовать её для этого).
Например:
Если у тебя много файлов ссылаются друг на друга то можно конечно использовать #pragma once, но эта штука работает не во всех компиляторах. Поэтому предпочтительнее использовать:
#ifndef FILE_H
#define FILE_H
#include "file1.h"
#include <iostream> например этот заголовочный файл объявлен и в file1.h
#endif // !FILE_H
Ещё в заголовочном файле math.h есть константы (число пи например), но они скрыты если не объявлен #define _USE_MATH_DEFINES
Подобную штуку я использовал в своем проекте вот пример:
#if TYPE_64
using type = uint64_t;
#elseif defined(TYPE_32)
using type = uint32_t;
#elseif defined(TYPE_16)
using type = uint16_t;
#else
using type = uint8_t;
#endif
Ещё можно подобные штуки расставить по всему коду для вывода информации о работе программы на проверку есть ли #define DEBUG, а когда программа готова то просто убрать этот define и программа будет чуть быстрее работать, так как участки кода с выводом информации не будут работать.