1. A software development method for processing a computer program, said method being performed on a computing device including a processor having associated storage, said method comprising: receiving with said computing device and storing in said storage, at least one C or C++ input source file; providing, stored on said storage, a Bounds-checking C library including non-deprecated functions in which a bounds-data Guarantee is explicitly passed as an argument, said non-deprecated functions corresponding to deprecated function that lack some indication of bounds data; automatically by machine re-writing said input source file into a further source file which replaces at least some of said deprecated functions encountered in said input source file with invocations of corresponding non-deprecated functions from the Bounds-checking C library in which a bounds-data Guarantee is explicitly passed as an argument, automatically by machine, selectively transforming invocations of at least some of said non-deprecated functions in the Bounds-checking C library into invocations of corresponding deprecated or unchecked functions conditioned on determining at compile time that all requirements of said non-deprecated function are met by Guarantees in the source program, and compiling, automatically by machine, said input source file into an executable object file thereby changing the state of said program from source code to object code protected with Bounds-checking guarantees, wherein said compiling automatically eliminates substantially all undefined out-of-bounds behaviors of said input source file; wherein said compiling includes linking or combining object files and corresponding bounds data files, producing fatal link-time diagnostics and/or an executable program.