The old "C" way to ensure a header file is only included once is the old idiom
#ifndef HEADER_XYZZY
#define HEADER_XYZZY
// bunch-o-common-header-stuff
#endif
But even the latest documentation on #pragma once
(https://learn.microsoft.com/en-us/cpp/preprocessor/once) tells you this is better than the "old" preprocessor way for all the right reasons (does not pollute global namespace, won't actually open the file, etc.).
So, should I tweak all my precompiled header files and remove the old guards and replace it with the "modern" way? The "move on to the new century" of modern C++ tells me YES.
(I do know that the 1980's #directive guard is portable - but I'm already exclusively using Visual Studio, so #pragma is ok).