comp.lang.ada
 help / color / mirror / Atom feed
From: Keith Thompson <kst-u@mib.org>
Subject: Re: Interfacing to C
Date: Fri, 01 Jan 2010 10:02:01 -0800
Date: 2010-01-01T10:02:01-08:00	[thread overview]
Message-ID: <lnljgh3dra.fsf@nuthaus.mib.org> (raw)
In-Reply-To: wcc1viaag1h.fsf@shell01.TheWorld.com

Robert A Duff <bobduff@shell01.TheWorld.com> writes:
> Keith Thompson <kst-u@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@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"



  reply	other threads:[~2010-01-01 18:02 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-24  9:46 Interfacing to C RasikaSrinivasan@gmail.com
2009-12-24 10:01 ` Hibou57 (Yannick Duchêne)
2009-12-25  2:07   ` Keith Thompson
2009-12-31 23:18     ` Robert A Duff
2010-01-01 18:02       ` Keith Thompson [this message]
2009-12-24 12:34 ` Niklas Holsti
2009-12-24 14:26   ` RasikaSrinivasan@gmail.com
2009-12-28  7:20   ` Hibou57 (Yannick Duchêne)
2009-12-24 12:35 ` Vadim Godunko
  -- strict thread matches above, loose matches on Subject: below --
2005-02-08 18:07 Garry
2005-02-08 18:43 ` Georg Bauhaus
2005-02-08 19:01 ` Ludovic Brenta
2005-02-08 19:27 ` Martin Krischik
2005-02-08 20:50 ` Björn Lundin
2005-02-09  7:27   ` Anders Wirzenius
2005-02-09 18:53     ` Garry
2005-02-09 21:35       ` Björn Lundin
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox