4 ms·
At university, my classes in C required using C89. The rationale given by the professor was that he wanted us prepared for industry, and if you learn to stick t
by strbean 6y ago
At university, my classes in C required using C89. The rationale given by the professor was that he wanted us prepared for industry, and if you learn to stick to C89 you will be able to write C for any job out there. I argued that C99 block scoped variables free up stack space (pretty silly argument but true), he wasn't buying it.
I think this kind of thinking is very common across the C community.
- sitkack 6y agoAnd to be clear, this kind of thinking hampers progress in the name of genericity. The ironic thing, is when someone makes that argument, they are admitting that the education they are giving creates students around the mean. When I teach someone, I try to give them a mental framework that others don't have and some unique skills that will differentiate them. Learning C89 gives someone the "most chances" of getting a random job who hasn't upgraded to better technology (◔_◔). Where if I show someone how to use a constraint solver to optimize something, or how to run a quick Monte Carlo simulation to test a hypothesis, those folks will have a huge advantage over the C89 slinging autobot. The only reason to learn "popular tech" is to hide within a flock of nameless cogs.
- benibela 6y agoWell, I learned the better technology (Pascal) rather than the popular tech (C), and then I could not find a development job
- sitkack 6y agoI am going to weaken my argument a bit and say that once something gets to be a large enough part of status quo, you have to learn it, at least enough to get by. Back then it was C, now it is JavaScript, Python and Kubernetes.
- dllthomas 6y agoFrom an educational standpoint, C89 is a bit further from modern languages, so might be a better call on that basis. If you know C89 and some recent languages, you can probably roll forward to C99 or C11 without much trouble. If you started with C11, and haven't every worked in something from the 80s... well, that's an education. > C99 block scoped variables free up stack space I'm not sure that's actually true. Or at least if it is, I think it's the choice of a particular implementation. The compiler doesn't actually need to allocate anything until first use, and nothing prevents it from hoisting allocations earlier.
- Koshkin 6y agoIt's actually true - in the sense that at the end of the block the part of the stack frame used by the variables defined in it becomes available for reuse (which is normally done at compile time).
- dllthomas 6y agoHmm, I think I might've misread, but I interpreted what was being asked for the ability to mix declarations and statements, as C99 allows. If what's being asked for is simply the ability to declare variables at the top of blocks, I think that's allowed in C89? Certainly GCC and clang both allow it without warning with -std=c89 and -pedantic. I agree that there are cases where enclosing a variable in a block will allow earlier reuse of the memory that backs it.
- Koshkin 6y agoI don't think that the mixing of definitions and statement has any effect on how the stack frame space is (re)used: even if all variable definitions are collected at the beginning of the block, it may still be possible for the compiler to find the points inside the block after which some of the variables are no longer used while some others are brought into action; such variables could, then, share the same space despite having the same lexical scope.
- strbean 6y agoI misremembered my C89 gripe! The issue was that the following is not allowed: for (int i = 0; // ... Forcing you to write int i; for (i = 0; // ... The real annoyance here is that you can't restrict the scope of a variable you need initialized at the start of a for loop to the loop block. It's all fine and dandy when you are just using `i` (and never miss resetting it, or use it somewhere expecting it to be one thing and have it end up being another). When you have several complex loops in a function, it can be a bit aggravating. (Declaring variables willy nilly anywhere in a block is nice too)
- 6y ago