From: Martin Krischik <martin@krischik.com>
Subject: Re: Ada equivalent for C-pointer?
Date: Sun, 16 Jan 2005 17:02:31 +0100
Date: 2005-01-16T17:02:31+01:00 [thread overview]
Message-ID: <5149344.sr9q7XqTZ2@linux1.krischik.com> (raw)
In-Reply-To: 41EA81CC.8090804@nowhere.fi
Niklas Holsti wrote:
> Martin Krischik wrote:
>> Pascal Obry wrote:
>>
>>
>>>Nick Roberts <nick.roberts@acm.org> writes:
>>>
>>>
>>>>For example, if there is a C function defined thus:
>>>>
>>>> int wibble(int *n);
>>>>
>>>>then in Ada you can declare:
>>>>
>>>> function Wibble (Number: in out Interfaces.C.int);
>>>> pragma Import(C,Wibble,"wibble");
>>>>
>>>>and it should work. (Obviously, you must link the C functions in
>>>>somehow.)
>>>
>>>I don't think so. Here Number will be passed by value, no? And you also
>>>need the returned value ;)
>>
>>
>> No all out and in out parameter are passed as pointer when pragma
>> Import(C is used - thats unless you use C_Pass_By_Copy. I have written
>> quite a lot of code interfaceing with C.
>
> But according to LRM B.3(68), for an "in out" parameter of an
> *elementary* type (as here) the pointer that is passed to the C function
> is a pointer to a *temporary copy* of the parameter (here Number), not a
> pointer to the parameter itself. This may not be what the C function
> expects.
Interesting. I have to think about that. Question is if the optimizer is
allowed to remove the copy.
> For example, it would not make sense for "wibble" to save the
> pointer for later use.
Well storing a pointer to a stack object is allways wrong. If you want to
store a pointer to the object neither "in out" nor "anomymous access" is
appropiate - a "pool access" should be used instead. And the Ada interface
should reflect that - if only to document propper use.
Martin
--
mailto://krischik@users.sourceforge.net
http://www.ada.krischik.com
next prev parent reply other threads:[~2005-01-16 16:02 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-14 16:41 Ada equivalent for C-pointer? Alfred Hilscher
2005-01-14 17:00 ` Duncan Sands
2005-01-14 20:05 ` tmoran
2005-01-15 5:00 ` Brian May
2005-01-14 22:33 ` Keith Thompson
2005-01-14 23:03 ` Stephen Leake
2005-01-15 15:51 ` Nick Roberts
2005-01-15 18:54 ` tmoran
2005-01-16 1:43 ` Keith Thompson
2005-01-17 21:35 ` Randy Brukardt
2005-01-15 9:09 ` Martin Krischik
2005-01-15 16:03 ` Nick Roberts
2005-01-15 16:27 ` Pascal Obry
2005-01-15 16:50 ` Nick Roberts
2005-01-15 17:11 ` Simon Wright
2005-01-15 18:46 ` Nick Roberts
2005-01-15 17:49 ` Pascal Obry
2005-01-16 8:44 ` Martin Krischik
2005-01-16 9:58 ` Pascal Obry
2005-01-16 11:07 ` Martin Krischik
2005-01-16 8:36 ` Martin Krischik
2005-01-16 15:01 ` Niklas Holsti
2005-01-16 16:02 ` Martin Krischik [this message]
2005-01-17 15:33 ` Niklas Holsti
2005-01-16 20:39 ` Nick Roberts
2005-01-17 21:38 ` Randy Brukardt
2005-01-17 21:45 ` Pascal Obry
2005-01-17 13:11 ` Alfred Hilscher
2005-01-18 7:31 ` Keith Thompson
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox