1. We have moved from vBulletin to XenForo and you are viewing the site in the middle of the move. Though the functional aspect of everything is working fine, we are still working on other changes including the new design on Xenforo.
    Dismiss Notice

what does _ARGS_ mean in C

Discussion in 'C' started by punith, Jun 12, 2009.

  1. punith

    punith New Member

    Hi All,

    I came across this piece of code where the function declaration was like this

    Code:
    return_t mtp3_init  _ARGS_((mtp3_init_opt_t *, error_t *));
    
    What is the significance of _ARGS_ here.

    The function definition looks like this.

    Code:
    return_t mtp3_init
    #ifdef ANSI_PROTO
           (mtp3_init_opt_t *p_init_opt,
            error_t         *p_ecode)
    #else
           (p_init_opt,p_ecode)
            mtp3_init_opt_t *p_init_opt;
            error_t         *p_ecode;
    #endif
    
    does _ARGS_ change the way the function is called ?
     
  2. SaswatPadhi

    SaswatPadhi ~ Б0ЯИ Τ0 С0δЭ ~

    _ARGS_ is used to pass arguments into a func, in a generic way.

    This is used here to allow non-ANSI as well as ANSI C compilers to compile the program successfully.
    Old non-ANSI C style functions were defined like :

    Code:
    int sum(a,b)
    int a,b;
    {
          return (a+b);
    }
    But ANSI C uses the following style :
    Code:
    int sum(int a, int b)
    {
          return (a+b);
    }
    So, what exactly is done here is, no specific style is adopted, rather the arguments are passed in a generic method by using _ARGS_.
    Then using the #ifdef, we check if ANSI style can be used.
    If so, we define the func in ANSI C style using the arguments passed through _ARGS_, else we define the func in non-ANSI C style using the arguments passed through _ARGS_.

    :)
     
  3. punith

    punith New Member

    Ok now i get it thanks a lot :)
     
  4. SaswatPadhi

    SaswatPadhi ~ Б0ЯИ Τ0 С0δЭ ~

    My pleasure :)
     
  5. mayjune

    mayjune New Member

    hey SaswatPadhi
    can you give my an example of how you would have written that a+b example using _ARGS_
    i am still not clear with the syntax...
    thanks...
     
  6. SaswatPadhi

    SaswatPadhi ~ Б0ЯИ Τ0 С0δЭ ~

    (First of all, note that you have to define the _ARGS_ macro and ANSI_PROTO yourself. It's not predefined.)

    Now, you can define the sum function this way :

    Declaration :
    Code:
    int sum _ARGS_((int a, int b));
    
    Definition :
    Code:
    int sum
    #ifdef ANSI_PROTO
        (int a, int b)
    #else
        (a, b)
        int a;
        int b;
    #endif
    
    I hope it's clear to you now. :)
     
    Last edited: Jun 15, 2009
  7. mayjune

    mayjune New Member

    ah so if on a compiler which is ansi, it will replace the code with standard arguments style
    else it will replace it with old fashioned way.... as its a "macro"
    neat...
    thanks...
    do people actually use it? professionally?
     
  8. SaswatPadhi

    SaswatPadhi ~ Б0ЯИ Τ0 С0δЭ ~

    Yeah, I have seen numerous applications of this macro. (And yes, professionally.)

    The code mentioned in the first post of this thread, I think is for some kind of signaling.
    (I guess that from mtp3. MTP3 = Message Transfer Protocol 3)
     

Share This Page