From: Keith Thompson on 1 Jan 2010 13:02 Robert A Duff <bobduff(a)shell01.TheWorld.com> writes: > Keith Thompson <kst-u(a)mib.org> writes: [...] >> Yes. In fact, C doesn't have pass by reference as a language feature; >> *all* function arguments are passed by value. >> >> For structs, it's very common in C to do the equivalent of >> pass-by-reference, by explicitly passing the address of the struct >> object. This is partly because very old versions of C didn't >> support struct parameters. > > Which version of C (when?) introduced (by-copy) struct params? It appeared in the 1989 ANSI C standard. It was undoubtedly implemented in some compilers a few years before that. K&R1 (Kernighan & Ritchie, "The C Programming Language, 1st edition, 1978) had structs, but didn't allow them to be assigned or passed as arguments. To be clear, C has *never* allowed structs to be passed by reference implicitly, though it's always allowed the equivalent by explicit coding. >> I find it a bit odd that Ada imposes a pass-by-pointer convention for >> C structs. > > It was a mistake. Partly my fault. I was thinking that it's common in > C to pass struct params by explicitly passing a pointer-to-struct, so > Ada should mimic that. Bad idea. By the time we realized the mistake, > it was too late to fix (compatibility!), so we invented C_Pass_By_Copy > as a workaround. > >> (No, C arrays aren't passed by reference. C array expressions, in >> most contexts, are implicitly converted to pointers; the resulting >> pointer can be passed by value.) > > Yeah. In other words, C arrays aren't passed, period. > That's another bad idea, and it's not my fault. ;-) Right, C arrays are very much second-class citizens, almost always manipulated indirectly via pointers. (There's a common misconception that C arrays and pointers are the same thing. They most definitely are not. See section 6 of the comp.lang.c FAQ, <http://www.c-faq.com>, for the details.) -- Keith Thompson (The_Other_Keith) kst-u(a)mib.org <http://www.ghoti.net/~kst> Nokia "We must do something. This is something. Therefore, we must do this." -- Antony Jay and Jonathan Lynn, "Yes Minister" |