Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10 beta 3/9/83; site vaxine.UUCP Path: utzoo!linus!vaxine!reg From: reg@vaxine.UUCP (Rick Genter) Newsgroups: net.lang.c Subject: What do *YOU* think of typedefs? (A long message) Message-ID: <208@vaxine.UUCP> Date: Wed, 29-Feb-84 22:23:33 EST Article-I.D.: vaxine.208 Posted: Wed Feb 29 22:23:33 1984 Date-Received: Fri, 2-Mar-84 00:23:57 EST Organization: Automatix Inc., Billerica, MA Lines: 76In the past there have been various coding style discussions (arguments? abuse?) regarding features such as indentation, where to put the braces, etc. I now wish to bring up an issue which I have not seen raised before, but find to be fairly important. What is the opinion of the net community regarding the use of typedefs? I am currently working on a project involving a *very* large software system (roughly 100,000 lines of C code). Most of the types have been typedef'd to more meaningful names. This is fine except for one specific case: typedefING ARRAY TYPES SUCKS. Perhaps I should explain. There are places in the software system I am working on which want to use a data structure as an array (mostly looping over the elements on the array to perform some operation on all elements of the array). There are also places which want to use the same data structured as a struct (compute some equation using the 2nd and 5th element of a 6 element array). When a typedef represents a struct, I don't have much trouble. For example, if I have: typedef struct { float thing1; float thing2; float thing3; float thing4; float thing5; float thing6; } Things; then it's nice to say: Things group; group.thing3 = group.thing5 - group.thing4; Manipulate (& group) Manipulate (g) Things *g; and so on. Now look what happens when I have: typedef float Things[ 6 ]; Things group; group[ 3 ] = group[ 5 ] - group[ 4 ]; Manipulate (group) <- If I put the &, I get a warning from cc Manipulate (g) Things g; <- If I put the *, I get something totally different that what I want! I guess the problem boils down to the fact that arrays are treated differently than any other type in the language. I have heard complaints registered against C since structures became lvalues, but at least structs end up getting treated more like all other types, such as: If I want the address of the struct, I say & struct; If I want a pointer to a struct, I say * struct; If I want to pass a struct, I say routine(struct); Getting back to my original question, what are the attitudes of other hackers towards typedefs? After hacking at a lot of the code in this software system (about 1/3 of it) I am finding that I would be much better off (and the code would be much more readable) if the structs are typedefd but the arrays aren't. Are there any other reasonable alternatives? Rick Genter Automatix Inc. ...!linus!vaxine!reg