|
| ▲ | lukasgelbmann 4 hours ago | parent | next [-] |
| 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. |
| |
| ▲ | uecker 4 hours ago | parent | next [-] | | 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. | | |
| ▲ | david2ndaccount an hour ago | parent [-] | | 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... |
| |
| ▲ | 4 hours ago | parent | prev [-] | | [deleted] |
|
|
| ▲ | randomNumber7 4 hours ago | parent | prev [-] |
| What happens when I put a variable of a struct type that contains a flexible array member on the stack? |
| |
| ▲ | uecker 3 hours ago | parent [-] | | The array has size 0. In GNU C, you can initialize it and then it has a fixed size corresponding to the initializer. |
|