As regards the title/topic of this thread. The point is, C is suppose to be (as I understand it), a systems language.
Consider, a hypothetical Make Character Uppercase, type of function. Which might boil down to just being a logical OR or AND, of the appropriate byte, with the correct binary immediate value, to accomplish the task.
If you do it with a single OR or AND instruction (as necessary, depending on if UPPER or LOWER case needed, etc). It can perhaps take 1/7th of an instruction cycle to execute (assuming typically 7 instructions are executed in the same cycle, by the superscaler processor and its out of order unit).
But, if it is insisted that the language performs extensive safety checks, at run time, even at the lowest (system) level. It might need to check the address is within the valid bounds of the particular array (if applicable). It might check the value is NOT 0 (NULL), as that may indicate a possible error somewhere.
It could check the value is not less than 32, and is not too big, etc.
Possibly other safety checks could be implemented.
But then with all the extra memory accesses, comparisons, branches and other stuff. It might take 5 or even 20 or more times longer to execute.
So, if all those safety checks are applied to nearly all operations, even at such a fundamentally low level. The language will end up producing stuff, which takes, perhaps twenty times longer to run, compared to if it could just ignore all those safety checks.
So, if GCC (mostly written in C) takes 10 minutes, to currently compile all your files, for a particular project, it would then end up taking, perhaps 200 minutes, instead (assuming the GCC time, was mostly due to CPU performance).
Similarly, most other things (which end up being written in C), would also take (perhaps) twenty times longer.
Such a situation, would tend to reduce peoples interest in C, and maybe make another language, be rather popular, because of its execution speed.
Some of the safety checks (in general), could be done at compile time, without affecting run time performance. In which case, they could be useful, as long as the compile times, don't end up becoming too long, as a result.
In other words, in practice. It is often necessary to choose between a very safe/robust language, that tends to protect users and programmers, against some kinds of mistakes/errors, but is perhaps not the fastest of languages, and language(s), that give the ultimate performance, that a computer can give.