I prepared a simple diagram; it is not very pretty, but hopefully gets the point across:
- Red: the set of all programs valid in C, C++, and Objective-C (relatively small)
- Green: the set of all programs valid in C and Objective-C, but invalid in C++ (even smaller)
- Gray: the set of all programs valid in Objective C and C++, but invalid in C (empty, as far as I know)
- Blue: the set of all programs valid only in Objective C (relatively large)
- Yellow: the set of all programs valid only in C++ (largest)
The set of valid C programs (in red and green) is an strict subset of the set of valid Objective C programs (blue)