Stand-aloneness and single-passness are orthogonal.
> I found no advantage to a single pass compiler. It isn't any faster.
A gigantic advantage: a single-pass-compilable language is simpler. By definition.
Implementations may or may not be simpler or faster.
> C++ doesn't allow forward declarations either.
Well, that's not what I meant.
C++ is "C with just this thing" done way too many times.
> The trouble with such sayings is like following a google map that says cross this bridge, but wasn't updated with news that the bridge is out.
TBH, I didn't really get this. Is this about sticking to C as is, but it is outdated as is?
C would be outdated if it didn't have, say, long long for 64-bit numbers. Having "true" be a keyword instead of a macro doesn't change how outdated it is or isn't, just like compile-time evaluation also doesn't.
> They are once you use another language that doesn't have those restrictions.
I have used many, and I still don't find them obvious.
> C adds new things all the time to the Standard, like normalized Unicode identifiers, which are a complete waste of time.
I agree that many/most are a waste of time, and shouldn't be added to C. The fact of C adding things to the standard all the time shouldn't justify adding even more things, but make one question if those are needed at all, and how to accomplish the goal without it.
> Every C compiler also adds a boatload of extensions, some good, some wacky, many ineptly documented, all incompatible with every other C compiler extensions.
I know about that, and my position is the same: just don't.
I don't use them also.