Design by contract is great, but if you want to go beyond the basics, you really need some form of language support. In the absence of inheritance, precondition and postcondition handling aren't too tough to deal with via preprocessors. But inheritance is much harder to handle, as are class and loop invariants, yet these are the very places where DBC really starts to shine.