C:
function and operator overloading would be nice (ideally if it could be done in a mostly ABI transparent manner, *1);
MSVC fully supporting C99 would also be nice;
a precompiled header system that doesn't suck;
if va_list didn't suck as bad;
some sort of variant type (though can be emulated via overloaded operators);
ability to support late-bound functions (*2);
portable lambdas / anonymous functions (vs compiler-specific extensions);
ability to fully overload function-calling and field-lookup operations (*3, ?);
maybe keywords to more finely control some compiler behaviors (whether or not to unroll loops);
more usable and portable support for SIMD operations;
maybe(?) standard support for computed goto and inter-procedural goto;
maybe(?) break and continue with labels;
context and declaration-order independent parsing (like in C#, *4);
loading code at runtime from source (without 3rd party libraries or implementing it oneself, ...);
...
*1: I am sometimes left wishing for ability to use a few C++ features without having to, well, actually use C++.
though, yes, one can use a C-like subset of C++, there are "little details".
well, and the cultural issue:
if you use C, it is generally accepted that you will be doing all sorts of wackiness;
if you use C++ and don't use very specific "idiomatic" practices, then a lot of people start raging and freaking out.
person A writes "const char *str", person B "NOOOO! use 'const std::string &str'!".
but, yeah, "just use C++" is an option for a lot of this.
*2: usually can be emulated with wrappers.
though, passable would be if the wrapper could be written more compactly, ex:
int (*SomeFunction)(int, int) = ^(int x, int y)->int { return (SomeFunction=myAppGetProcAddress("SomeFunction"))(x, y); };
or:
int (*SomeFunction)(int x, int y) =>
(SomeFunction=myAppGetProcAddress("SomeFunction"))(x, y);
as-is, it either requires the creation of multi-part declarations, or a function which invariably requires an extra call-frame and an internal if-branch.
*3: basically, taking operator-overloading slightly further, and allowing creation of fully custom synthetic object types (IOW: where, for example, it would be possible to create ones own types of classes and their own types of function-handles in-language).
making this useful would go into crazy land WRT the language semantics though.
it is unclear if the semantics and complexity this would introduce would be worth the possible gains though (and would likely share some overlap with C++ templates).
*4: can be done within C by adding some language constraints, however, adding these constraints would itself violate the standard (by potentially rejecting otherwise valid code). however, in practice, the constructs which would violate these constraints are rather uncommon (this strategy has been used effectively with some of my code-processing tools).
some of this was considered for a never-implemented language I had called "C-Aux", which would have been essentially like a C99 / C# hybrid (with some C++ like elements glued on, ...) with some emphasis on remaining (mostly) source-compatible with C (and would probably run on my existing VM, though this was intermixed with thoughts related to the possibility of a newer/more-efficient VM backend, which has also largely gone nowhere, ...).
or such...