I tried to learn more about the historical reason[s] for passing by value in C. There is a Stack Overflow post that touches on this topic in relation to C++. However, I'm interested in C. I imagine back when this decision was made, one could have opted to do what we call now "pass by reference". Yet, this was not the choice made. Are there optimization, multi-threading, etc., issues that come into play?
I tried to Google this, but didn't get anywhere. Passing by value presents some guarantees in relation to the variable not being changed under the hood. Is this the only reason? I imagine back then the concept of "copying a fat object" wasn't much of an issue and passing by value incurred small overhead. As such, this might have been deemed the right choice. Is there more to this decision than this?