3 ms·
There is no spiral. C's pointer declaration syntax is arguably backwards ("declaration follows usage") but fundamentally follows normal precedence rules. The so
by naniwaduni 7y ago
There is no spiral. C's pointer declaration syntax is arguably backwards ("declaration follows usage") but fundamentally follows normal precedence rules. The so-called spiral is total nonsense misinformation.
- saagarjha 7y agoWhat about this do you find disagreeable? http://c-faq.com/decl/spiral.anderson.html http://c-faq.com/decl/spiral.anderson.html
- dnautics 7y agoThe fact that it's wrong if you try to generalize it beyond the examples given?
- saagarjha 7y agoDoes it? Here's one that I grabbed from cdecl.org: char * const (*(* const bar)[5])(int ) And its translation: declare bar as const pointer to array 5 of pointer to function (int) returning const pointer to char This seems like what I'd get from the spiral technique.
- palotasb 7y agoThe spiral rule works if "pointer to" and "function returning"/"array of" alternate but it breaks if they don't, i.e., if you have arrays of arrays or pointers to pointers. int** arr1_of_arr2_of_arr3_of_ptr_to_ptr_to_int[1][2][3] In this case, spiraling between [1], ×, [2], ×, [3], int is obviously wrong, the correct reading order is [1], [2], [3], ×, ×, int. (Edit: read × = *) The Right-Left Rule is quoted less frequently on HN but it's a correct algorithm for deciphering C types: http://cseweb.ucsd.edu/~ricko/rt_lt.rule.html http://cseweb.ucsd.edu/~ricko/rt_lt.rule.html
- diegoperini 7y agoI would name that algorithm "inside-out" instead of "right-left" if my understanding of its behavior is correct.
- saagarjha 7y agoAren't you supposed to treat multiple array or pointers as a group?
- dnautics 7y agoThat's exactly my point. It's confusing enough that someone e made a bullshit claim that was totally wrong and confused noobs for years. That won't happen with zig.
- pjmlp 7y agoThat won't happen with any sane systems language all the way back to Algol dialects. The only thing that C has taken from Algol, was structured control and data.