5 ms·
>Can you ask Github Co-pilot to look at C code and answer the question "What is >the length of the array 'buf' passed to this function"? That tells you how to >
by thradams 3y ago
>Can you ask Github Co-pilot to look at C code and answer the question "What is >the length of the array 'buf' passed to this function"? That tells you how to >express the array in a language where arrays have enforced lengths, whicn >includes both C++ and Rust
this is the way you tell C what is the size of array.
void f(int n, int a[n]) {
}
- Animats 3y agoYou can write that in C, but it doesn't really do anything. It's equivalent to void f(int n, int a[]) { } Why? So that you can write void f(int n, int m, int a[n][m]) { } which declares a 2-dimensional array parameter. In that case, the "m" is used to compute the position in the array for a 2D array. The "m" doesn't do anything. This is equivalent to writing void f(int n, int m, int a[][m]) { } This is C's minimal multidimensional array support, known by few and used by fewer. Over a decade ago, I proposed that sizes in parameters should be checkable and readable I worked out how to make it work.[1] But I didn't have time for the politics of C standards. [1] http://animats.com/papers/languages/safearraysforc43.pdf http://animats.com/papers/languages/safearraysforc43.pdf
- JonChesterfield 3y agoyou're missing the word "static" to have that work as intended. Option (2) at https://en.cppreference.com/w/c/language/array https://en.cppreference.com/w/c/language/array Parameters like `const double b[static restrict 10]` for at least 10 long and doesn't alias other parameters. Syntactically this is pretty weird.
- a_t48 3y agoDo you have source on this syntax? Does the `[n]` actually do anything here? Fooling around in godbolt, `void f(int n, int a[n]) {` is the same as `void f(int n, int a[]) {` and doesn't appear to change assembly or generate any warnings/errors with improper usage.
- unnah 3y agoIt looks like standard C99 variable-length array (VLA) syntax: https://en.cppreference.com/w/c/language/array#Variable-length_arrays https://en.cppreference.com/w/c/language/array#Variable-leng... The major difference is when the array is multi-dimensional. If you don't have VLAs then you can only set the inner dimensions at compile time, or alternatively use pointer-based work-arounds. Even in the case of one-dimensional arrays, a compiler or a static analyzer can take advantage of the VLA size information to insert run-time checks in debug mode, or to perform compile-time checks.
- a_t48 3y agoThank you - that makes total sense.