Parameter Passing via a Stack

Discussion in 'C Programming' started by Theo R., Apr 2, 2007.

  1. Theo R.

    Theo R. Guest

    Hi all,

    Does the C99 Standard explicitly mention the need for a stack for
    passing arguments or Is this platform specific?

    As an example, the ARM9 processor recommends Core Registers R0-R3 be
    used when passing less than four parameters. However some compilers
    for ARM9 do not follow this recommendation and place all parameters on
    the stack. Therefore, the question arises if the compilers were
    following the C Standard instead.

    I remember that order of evaludation is right to left. Is this part of
    the standard or is it an implementation detail?

    Thanks,
    Theo.
     
    Theo R., Apr 2, 2007
    #1
    1. Advertising

  2. Theo R.

    Ian Collins Guest

    Theo R. wrote:
    > Hi all,
    >
    > Does the C99 Standard explicitly mention the need for a stack for
    > passing arguments or Is this platform specific?
    >

    No, it is an implementation detail.

    --
    Ian Collins.
     
    Ian Collins, Apr 2, 2007
    #2
    1. Advertising

  3. Theo R.

    Sharath Guest

    On Apr 2, 1:30 pm, "Theo R." <> wrote:
    > Hi all,
    >
    > Does the C99 Standard explicitly mention the need for a stack for
    > passing arguments or Is this platform specific?


    No.

    > I remember that order of evaludation is right to left. Is this part of
    > the standard or is it an implementation detail?


    Wrong. Order of evaluation is unspecified.

    Why don't you get yourself a copy of standard and see yourself?
    http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf

    -Sharath
     
    Sharath, Apr 2, 2007
    #3
  4. On Apr 2, 1:30 am, "Theo R." <> wrote:
    >
    > Does the C99 Standard explicitly mention the need for a stack for
    > passing arguments or Is this platform specific?


    It's an implementation detail - C doesn't need a stack at all.

    > ...


    > I remember that order of evaludation is right to left. Is this part of
    > the standard or is it an implementation detail?


    It's an implementation detail, and the implementation is not required
    to document it.
     
    J. J. Farrell, Apr 2, 2007
    #4
  5. Theo R.

    santosh Guest

    Theo R. wrote:
    > Hi all,
    >
    > Does the C99 Standard explicitly mention the need for a stack for
    > passing arguments or Is this platform specific?


    No.

    > As an example, the ARM9 processor recommends Core Registers R0-R3 be
    > used when passing less than four parameters. However some compilers
    > for ARM9 do not follow this recommendation and place all parameters on
    > the stack. Therefore, the question arises if the compilers were
    > following the C Standard instead.


    The Standard says nothing about how function parameters are managed,
    just that they're made available to the function itself.
     
    santosh, Apr 2, 2007
    #5
  6. "Theo R." <> writes:
    > Does the C99 Standard explicitly mention the need for a stack for
    > passing arguments or Is this platform specific?


    The word "stack" appears nowhere in the C99 standard (nor does the
    word "heap"). Argument passing mechanisms are
    implementation-specific.

    [...]

    > I remember that order of evaludation is right to left. Is this part of
    > the standard or is it an implementation detail?


    That's also implementation-specific.

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Apr 2, 2007
    #6
  7. Theo R.

    Guest

    My glasses must be playing up - I initially read the subject line as
    "Parameter Passing via a Stick". Anyone for an April 1st RFC? Would it
    be possible to produce a compliant implementation using a Stick for
    passing parameters?
     
    , Apr 2, 2007
    #7
  8. Theo R.

    Thad Smith Guest

    Sharath wrote:
    > On Apr 2, 1:30 pm, "Theo R." <> wrote:


    >> I remember that order of evaludation is right to left. Is this part of
    >> the standard or is it an implementation detail?

    >
    > Wrong. Order of evaluation is unspecified.


    It is an implementation detail.

    The question makes it obvious that right-to-left evaluation is for a
    particular implementation and asks whether such behavior is standard.
    The answer "wrong" is wrong for the question asked.

    --
    Thad
     
    Thad Smith, Apr 2, 2007
    #8
  9. Theo R.

    santosh Guest

    wrote:
    > My glasses must be playing up - I initially read the subject line as
    > "Parameter Passing via a Stick". Anyone for an April 1st RFC? Would it
    > be possible to produce a compliant implementation using a Stick for
    > passing parameters?


    Yes. Those are just implementation details. Currently the most popular
    parameter passing mechanism for the DS9k are wormholes, and carrier
    pigeons for variable length args.

    :)
     
    santosh, Apr 2, 2007
    #9
  10. In article <>,
    <> wrote:
    >My glasses must be playing up - I initially read the subject line as
    >"Parameter Passing via a Stick".


    <OT>
    In networking, there is a not-uncommon configuration called
    "Router on a Stick", which refers to using a router to route
    between different subnets on the same physical segment, with
    the packets going into the router and back out by the same
    physical interface. Used when you have multiple IP ranges on the
    same LAN. As contrasted to routing between different
    physical interfaces, which is traditionally used when there
    is an "inside" and an "outside" such as routing between a LAN
    and the Internet.
    </OT>
    --
    There are some ideas so wrong that only a very intelligent person
    could believe in them. -- George Orwell
     
    Walter Roberson, Apr 2, 2007
    #10
  11. "Theo R." <> wrote in message
    news:...
    > Does the C99 Standard explicitly mention the need for a stack for
    > passing arguments or Is this platform specific?
    >
    > As an example, the ARM9 processor recommends Core
    > Registers R0-R3 be used when passing less than four
    > parameters. However some compilers for ARM9 do not follow
    > this recommendation and place all parameters on the stack.
    > Therefore, the question arises if the compilers were following
    > the C Standard instead.


    The C Standard says nothing about this, nor does it require that an
    implementation have "registers" or a "stack" (or a "heap") at all.

    Each platform (OS/CPU combination) does tend to have an Application Binary
    Interface (ABI) standard, and compilers/linkers are expected to conform to
    that. However, the ABI is not part of the C Standard, so an implementation
    can disregard the accepted ABI and still be conforming according to
    ISO/ANSI.

    (Some ABIs, e.g. x86, even define multiple calling conventions, but they'll
    specify one as the default. It's up to the programmer to make sure the
    right compiler extensions or options are used if a non-default calling
    convention is needed.)

    S

    --
    Stephen Sprunk "Those people who think they know everything
    CCIE #3723 are a great annoyance to those of us who do."
    K5SSS --Isaac Asimov


    --
    Posted via a free Usenet account from http://www.teranews.com
     
    Stephen Sprunk, Apr 2, 2007
    #11
  12. "santosh" <> writes:
    > wrote:
    >> My glasses must be playing up - I initially read the subject line as
    >> "Parameter Passing via a Stick". Anyone for an April 1st RFC? Would it
    >> be possible to produce a compliant implementation using a Stick for
    >> passing parameters?

    >
    > Yes. Those are just implementation details. Currently the most popular
    > parameter passing mechanism for the DS9k are wormholes, and carrier
    > pigeons for variable length args.
    >
    > :)


    Are those "wormholes" in the sense of discontinuities in the
    space-time continuum, or "wormholes" in the sense of holes dug by
    worms? Or is it a compile-time option?

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Apr 2, 2007
    #12
  13. >My glasses must be playing up - I initially read the subject line as
    >"Parameter Passing via a Stick". Anyone for an April 1st RFC? Would it
    >be possible to produce a compliant implementation using a Stick for
    >passing parameters?


    Yes (and I don't mean that as an April 1st joke). You spear the
    arguments in the correct order on the stick, and then pass the stick
    (with the arguments attached) to the function.

    But I think "Parameter Passing via Federal Express" is more
    interesting. For a related method, see RFC2549.
     
    Gordon Burditt, Apr 3, 2007
    #13
  14. Theo R.

    CBFalconer Guest

    "Theo R." wrote:
    >
    > Does the C99 Standard explicitly mention the need for a stack for
    > passing arguments or Is this platform specific?


    bash-2.04$ grep stack /stds/n869.txt
    bash-2.04$


    --
    Chuck F (cbfalconer at maineline dot net)
    Available for consulting/temporary embedded and systems.
    <http://cbfalconer.home.att.net>



    --
    Posted via a free Usenet account from http://www.teranews.com
     
    CBFalconer, Apr 3, 2007
    #14
  15. Theo R.

    CBFalconer Guest

    wrote:
    >
    > My glasses must be playing up - I initially read the subject line as
    > "Parameter Passing via a Stick". Anyone for an April 1st RFC? Would it
    > be possible to produce a compliant implementation using a Stick for
    > passing parameters?


    Sure. For example, come up with conventions for the spacing and
    sizes of the whittled notches. Hire small boys with penknives.
    The system would probably be fairly slow, but then there are no C
    standards for speed.

    --
    Chuck F (cbfalconer at maineline dot net)
    Available for consulting/temporary embedded and systems.
    <http://cbfalconer.home.att.net>



    --
    Posted via a free Usenet account from http://www.teranews.com
     
    CBFalconer, Apr 3, 2007
    #15
  16. Theo R.

    Flash Gordon Guest

    CBFalconer wrote, On 03/04/07 01:59:
    > "Theo R." wrote:
    >> Does the C99 Standard explicitly mention the need for a stack for
    >> passing arguments or Is this platform specific?

    >
    > bash-2.04$ grep stack /stds/n869.txt
    > bash-2.04$


    Although the result is correct in this case, you really should use a
    case insensitive search to demonstrate it. Or just answer the question
    since the OP might not know about grep.
    --
    Flash Gordon
     
    Flash Gordon, Apr 3, 2007
    #16
  17. Theo R.

    Chris Dollin Guest

    CBFalconer wrote:

    > "Theo R." wrote:
    >>
    >> Does the C99 Standard explicitly mention the need for a stack for
    >> passing arguments or Is this platform specific?

    >
    > bash-2.04$ grep stack /stds/n869.txt
    > bash-2.04$


    Perhaps all occurrences of Stack were spelt with at least one
    capital letter?

    --
    The second Jena user conference! http://hpl.hp.com/conferences/juc2007/
    "If there is a problem, you must confess it, Mr Chaplin"/The Beiderbeck Affair/

    Hewlett-Packard Limited registered office: Cain Road, Bracknell,
    registered no: 690597 England Berks RG12 1HN
     
    Chris Dollin, Apr 3, 2007
    #17
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Surinder Singh
    Replies:
    1
    Views:
    1,248
    Richard Bos
    Dec 20, 2007
  2. Casey Hawthorne
    Replies:
    3
    Views:
    1,150
    Flash Gordon
    Nov 1, 2009
  3. Mister B
    Replies:
    8
    Views:
    599
    Nick Keighley
    Aug 26, 2010
  4. Debajit Adhikary
    Replies:
    36
    Views:
    2,397
    Andre Kaufmann
    Feb 10, 2011
  5. Sam Roberts
    Replies:
    1
    Views:
    237
    Yukihiro Matsumoto
    Feb 11, 2005
Loading...

Share This Page