home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.c      Meh, in C you gotta define EVERYTHING      243,242 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 241,582 of 243,242   
   Janis Papanagnou to bart   
   Re: New and improved version of cdecl   
   28 Oct 25 04:10:29   
   
   From: janis_papanagnou+ng@hotmail.com   
      
   On 27.10.2025 18:44, bart wrote:   
   > On 27/10/2025 16:35, David Brown wrote:   
   >> On 27/10/2025 12:22, bart wrote:   
   >   
   >   
   > /My syntax/ (as in my proposal) is bizarre,   
      
   What was your proposal? - Anyway, it shouldn't be "bizarre"; it's   
   under your design-control!   
      
   > but actual C type syntax isn't?!   
      
   There were reasons for that choice. And the authors have explained   
   them. - This doesn't make their choice any better, though, IMO.   
      
   >   
   > The latter is possibly the worst-designed feature of any programming   
   > language ever, certainly of any mainstream language. This is the syntax   
   > for a pointer to an unbounded array of function pointers that return a   
   > pointer to int:   
   >   
   >     int *(*(*)[])()   
   >   
   > This, is not bizarre?!   
      
   You need to know the concept behind it. IOW, learn the language and   
   you will get used to it. (As with other features or "monstrosities".)   
      
   > Even somebody reading has to figure out which *   
   > corresponds to which 'pointer to', and where the name might go if using   
   > it to declare a variable.   
   >   
   > In the LTR syntax I suggested, it would be:   
   >   
   >    ref[]ref func()ref int   
   >   
   > The variable name goes on the right. For declaring three such variables,   
   > it would be:   
   >   
   >    ref[]ref func()ref int a, b, c   
   >   
   > Meanwhile, in C as it is, it would need to be something like this:   
   >   
   >     int *(*(*a)[])(), *(*(*b)[])(), *(*(*c)[])()   
   >   
   > Or you have to use a workaround and create a named alias for the type   
   > (what would you call it?):   
   >   
   >     typedef int *(*(*T)[])();   
   >   
   >     T a, b, c;   
   >   
   > It's a fucking joke.   
      
   Actually, this is a way to (somewhat) control the declaration "mess"   
   so that it doesn't propagate into the rest of the source code and   
   muddy each occurrence. It's also a good design principle (also when   
   programming in other language) to use names for [complex] types.   
      
   I take that option 'typedef' as a sensible solution of this specific   
   problem with C's underlying declaration decisions.   
      
   > And yes, I needed to use a tool to get that first   
   > 'int *(*(*)[])()', otherwise I can spend forever in a trial and error   
   > process of figuring where all those brackets and asterisks go.   
   >   
   > THIS IS WHY such tools are necessary, because the language syntax as it   
   > is is not fit for purpose.   
      
   I never used 'cdecl' (as far as I recall). (I recall I was thinking   
   sometimes that such a tool could be useful.) Myself it was sufficient   
   to use a 'typedef' for complex cases. Constructing such expressions   
   is often easier than reading them.   
      
   > [...]   
   >   
   >> Yes, my ideal would be different from the output of cdecl.  No, the   
   >> author is not doing something "wrong".  I live in a world where   
   >> programming languages are used by more than one person, and those   
   >> people can have different opinions.   
   >   
   > Find me one person who doesn't think that syntax like  int *(*(*)[])()   
   > is a complete joke.   
      
   Maybe the authors (and all the enthusiastic adherents) of "C"?   
      
   Janis   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca