As others said in the comments, this is a bad idea, as it goes against the C and C++ standards.
It is also very complicated to accomplish, and @old_timer said, requires to change the compiler itself. The reason for that is this:
In most translation environments (of which compiler is part of) the initial zeroing of global and static variables which are not initialized explicitly, is not performed by code generated by compiler, that would be too lengthy. Instead, the compiler allocates all such variables together into one continguous section (traditionally called .bss or COMMON); and then the linker attaches a small piece of code (called startup code) which (among other things) simply fills all this section by zero bytes. This works, as all zero variables - including multi-byte ones, e.g. 16-bit or 32-bit variables - consists of all zero bytes.
Simply replacing the startup code to fill the .bss section by ones would not work, as the information of width of individual variables in that section is already lost at this point. So, for example, a 32-bit variable would end up being initialized to 0x01010101, which is not what you want.
As it's only the compiler which "knows" the width of individual variables, you would need to modify the compiler itself to perform the initialization. You could do that only with open-source compilers, and it's an unreasonably complex thing to do.
In short, the answer is: just don't.