* Variable list parameters
@ 2007-11-26 15:44 shaunpatterson
2007-11-26 16:52 ` Steve
0 siblings, 1 reply; 6+ messages in thread
From: shaunpatterson @ 2007-11-26 15:44 UTC (permalink / raw)
Does Ada have variable length parameter lists?
i.e void printf (char *, ...)
Thanks
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Variable list parameters
2007-11-26 15:44 Variable list parameters shaunpatterson
@ 2007-11-26 16:52 ` Steve
2007-11-26 18:44 ` tmoran
2007-11-26 19:00 ` Robert A Duff
0 siblings, 2 replies; 6+ messages in thread
From: Steve @ 2007-11-26 16:52 UTC (permalink / raw)
<shaunpatterson@gmail.com> wrote in message
news:9e4ce016-d6ab-49de-b6f7-e46c59e047b1@t47g2000hsc.googlegroups.com...
> Does Ada have variable length parameter lists?
>
> i.e void printf (char *, ...)
No.
You can achieve similar results by making a variable length array and
passing the array as an parameter:
type arg_array is array( Positive range <> ) of integer;
procedure process_args( args : arg_array ) is
begin
null;
end process_args;
...
process_args( ( 1, 2, 3 ) );
If you need to have different argument types you can either make the
elements of the array tagged or variant types.
Regards,
Steve
(The Duck)
>
> Thanks
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Variable list parameters
2007-11-26 16:52 ` Steve
@ 2007-11-26 18:44 ` tmoran
2007-11-26 19:00 ` Robert A Duff
1 sibling, 0 replies; 6+ messages in thread
From: tmoran @ 2007-11-26 18:44 UTC (permalink / raw)
> type arg_array is array( Positive range <> ) of integer;
>
> procedure process_args( args : arg_array ) is
> ...
> process_args( ( 1, 2, 3 ) );
If the maximum argument list is not too long, you can also use
overloading, eg:
procedure process_args( one : integer);
procedure process_args( one, two : integer);
procedure process_args( one, two, three : integer);
procedure process_args( one, two, three : integer; four : character);
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Variable list parameters
2007-11-26 16:52 ` Steve
2007-11-26 18:44 ` tmoran
@ 2007-11-26 19:00 ` Robert A Duff
2007-11-28 8:48 ` axtens
1 sibling, 1 reply; 6+ messages in thread
From: Robert A Duff @ 2007-11-26 19:00 UTC (permalink / raw)
"Steve" <nospam_steved94@comcast.net> writes:
> <shaunpatterson@gmail.com> wrote in message
> news:9e4ce016-d6ab-49de-b6f7-e46c59e047b1@t47g2000hsc.googlegroups.com...
>> Does Ada have variable length parameter lists?
>>
>> i.e void printf (char *, ...)
>
> No.
>
> You can achieve similar results by making a variable length array and
> passing the array as an parameter:
>
> type arg_array is array( Positive range <> ) of integer;
>
> procedure process_args( args : arg_array ) is
> begin
> null;
> end process_args;
>
> ...
>
> process_args( ( 1, 2, 3 ) );
That works fine for integers, but if you want to pass Strings
(a common case), it gets rather ugly!
> If you need to have different argument types you can either make the
> elements of the array tagged or variant types.
An array of variant records works, so long as the discriminant has a
default value. As for array of tagged, well, it has to be class-wide,
and array-of-class-wide is illegal, so it has to be
array-of-pointer-to-class-wide.
- Bob
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Variable list parameters
2007-11-26 19:00 ` Robert A Duff
@ 2007-11-28 8:48 ` axtens
2007-11-28 20:21 ` amado.alves
0 siblings, 1 reply; 6+ messages in thread
From: axtens @ 2007-11-28 8:48 UTC (permalink / raw)
Newbie says, "What about Stdarg.Impl?"
-- $Source: /user/cp_source/ObjectAda/rts/bindings/win32ada/stdarg/
impl.ads,v $
-- $Revision: 1.1 $ $Date: 2001/01/09 19:05:19 $ $Author: shancher $
with Interfaces.C.Pointers;
package Stdarg.Impl is
-- *******************************************************
-- Getting arguments out of lists, for use by implementers
-- of variable-parameter functions
-- *******************************************************
subtype Int is Interfaces.C.Int;
type Param_Access is private;
function Address_of_First_Arg (Args: ArgList) return Param_Access;
function Address_of_Vararg_List (Args: ArgList) return
Param_Access;
function ArgCount (Args: ArgList) return Int;
function "&" (Left, Right: ArgList) return ArgList;
procedure Do_Varargs (Proc : in System.Address;
Nb_Args : Int;
Arg_Addr : Param_Access);
function F_Varargs (Func : in System.Address;
Nb_Args : Int;
Arg_Addr : Param_Access) return
Stdarg.C_Param;
-- debugging
-- procedure Dump(Addr: Param_Access; Nb_Args : Stdarg.Int);
-- pragma Import(C, Dump, "dump");
private
package Arith is new Interfaces.C.Pointers(
Integer, C_Param, Stdarg.ArgVector, 0);
type Param_Access is new Arith.Pointer;
pragma Import(C, Do_Varargs, "do_varargs");
pragma Import(C, F_Varargs, "do_varargs");
-------------------------------------------------------------------------------
--
-- THIS FILE AND ANY ASSOCIATED DOCUMENTATION IS FURNISHED "AS IS"
WITHOUT
-- WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED
-- TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR
-- PURPOSE. The user assumes the entire risk as to the accuracy and
the
-- use of this file.
--
-- Copyright (c) Intermetrics, Inc. 1995
-- Royalty-free, unlimited, worldwide, non-exclusive use,
modification,
-- reproduction and further distribution of this file is permitted.
--
-------------------------------------------------------------------------------
end Stdarg.Impl;
Kind regards,
Bruce.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Variable list parameters
2007-11-28 8:48 ` axtens
@ 2007-11-28 20:21 ` amado.alves
0 siblings, 0 replies; 6+ messages in thread
From: amado.alves @ 2007-11-28 20:21 UTC (permalink / raw)
Stdarg.Impl looks like support to import C units that have a variable
number of arguments.
Programming in Ada you should use one of the idioms already mentioned.
(Don't try to write C in Ada. You'll only hurt yourself.)
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2007-11-28 20:21 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-11-26 15:44 Variable list parameters shaunpatterson
2007-11-26 16:52 ` Steve
2007-11-26 18:44 ` tmoran
2007-11-26 19:00 ` Robert A Duff
2007-11-28 8:48 ` axtens
2007-11-28 20:21 ` amado.alves
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox