C99 changes this, which is unfortunate.
You are merging two things which should not.
Yes, one can write valid C code which is at the same time valid C++ code. Yes, this is the way to go if you want to be portable. But C99 does not change anything here. It does not remove (i.e. in practice the restrictions of C99 vs. C90 are not a problem¹), nor it does add anything (i.e. you shoult not use any of the new feature, if you want to stay portable). You should stick to the common idiom (which is the subset of C you were referring), which was also acceptable to both C90 and C++98 compilers, and will be accepted by the forecoming C99 compilers. And this will continue this way for a number of years... No change here.
At the same time, C99 brings a lot of new possibilities (inline, longer identifiers, intmax_t, etc.), but this can be seen as an extension of C90. For a part, these extensions are not compatible with C++98 (but one can expect of the next revision of C++ Standard to get some of them; one can also expect the C/C++ compilers vendors to accept them as extensions in C++). At the same time, most compilers do not support them either. And when they'll do, clearly if you are using these new features, then you will be using brand new stuff, exactly what had happened when you wrote your first C++ classes some years ago. And this new stuff brings some advantages, but you cannot ask for backward compatibility at the same time, and everybody knows that.
¹: Yes, I know of the heated discussions, for example in comp.std.c, about some C99's new stuff to create problem with well-written code, for example with the assumption of long being the widest integer type available, or size_t to be safely casted to unsigned long, two assumtions that are not valid any more with C99. I consider this to be theological discussions best left to this very forum.