There are no hidden calls, mostly there is one way to do something. No exceptions, so you can see entrance and exit points of a function. There is no "abstraction" feature, so you tend to keep your code away from unnecessary abstractions.
You can find counter-examples ofcourse, bad programmers can create a mess from anything and everything.
My question is, as an example, how come Linux kernel's code ,nginx's code or memcached's code 100 times more readable than any other project in another "better" language.
This is why people say C is simple. You have limited options and you tend to end up with a "simple, readable" solution.
No one says "C is perfect, you should use it for anything and everything, it handles all the issues of computers, no gotchas, no surprises, 3 year old kids should start with C programming."
You can find counter-examples ofcourse, bad programmers can create a mess from anything and everything.
My question is, as an example, how come Linux kernel's code ,nginx's code or memcached's code 100 times more readable than any other project in another "better" language.
This is why people say C is simple. You have limited options and you tend to end up with a "simple, readable" solution.
No one says "C is perfect, you should use it for anything and everything, it handles all the issues of computers, no gotchas, no surprises, 3 year old kids should start with C programming."