← Back to context

Comment by lukasgelbmann

7 hours ago

Yes, and variable length arrays were made an optional part of the standard in C11. Whereas flexible array members remain a standard required feature.

Flexible array members don’t allocate a dynamic amount of memory on the stack.

VLAs are supported by basically all modern C compilers though, and I do not think adding them was a mistake (I certainly use them a lot!). They got a bad reputation due to stack clash attacks, but in the past some compilers did not implement stack probing (clang was very late). But this was fixed a decade ago.

  • Their specification is pretty bad, allowing code like:

        #include <stdio.h>
        #include <stddef.h>
        void v(int y[printf("hello world!\n")]){ 
        }
    
        int main(){
            v(NULL);
            typedef int wut[printf("oh no\n")];
        }
        $ cc vla.c && ./a.out
        hello world!
        oh no

    `typedef`s with side effects...