When you are old (or “experienced” if you prefer), you begin to realize how much of what you learned is wrong. Even if it was “right” when you learned it. I think of all peers that went through computer courses at colleges back in the late 1980s or 1990s, learning now-obsolete languages and being taught methods and approaches that are today considered wrong.
When I learned C, it was on a pre-ANSI K&R C compiler. I learned it on my Radio Shack Color Computer 3 under the OS-9 operating system, with assistance from a friend of mine who had learned C on his Commodore Amiga.
I had alot of new things to learn in 1995 when I took a job with Microware Systems Corporation (creator of OS-9 and the K&R compiler I had learned on). Their Ultra-C compiler was an ANSI compiler, and it did things quite different.
In that era of the C89/C90 standard, arrays were just arrays and we liked it that way:
int array[42];
if you wanted things to be more flexible, you had to malloc() memory yourself.
int *array = malloc (sizeof(int)*42);
…and remember to stay within your boundaries and clean up/free that memory when you were done with it.
But C99 changed this, somewhat, with the introduction of VLAs (Variable Length Arrays). Now you could declare an array using a variable like this:
int x=42;
int array(x);
Neat. I do not think I have ever used this. One downside is you cannot do this with static variables, since those are created/reserved at compile time. But it is still neat.
But today I learned, you couldn’t rely on VLA is you were using C11. Apparently, they became optional that year. A compiler would define a special define if it did not support them:
__STD_NO_VLA__
But at least for twelve years of the standard, you could rely on them, before not being able to rely on them.
And then C23 happened, which I just learned made VLAs mandatory again.
So, uh, I guess if you have the latest and greatest, you can use them. For now. Until some future change makes them option again. Or removes them. Or whatever.
Still neat.
But I doubt any of the embedded C compilers I use for my day job support them.