The general recommendation comes from the fact that not only is there no guarantee that other compilers will implement #pragma once(or any other pragma), there is no guarantee that other compilers will implement the #pragma oncesame way that GCC does. Another compiler could legitimately give it a completely different meaning, or, even worse, subtly different. If you do not need portable code, you can ignore this recommendation.
#ifndef/#define , . , . , , .