what does _ARGS_ mean in C

punith's Avatar, Join Date: Sep 2007
Go4Expert 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 ?
0
SaswatPadhi's Avatar, Join Date: May 2009
~ Б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: C
int sum(a,b)
int a,b;
{
      return (a+b);
}

But ANSI C uses the following style :
Code: C
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_.

0
punith's Avatar, Join Date: Sep 2007
Go4Expert Member
Ok now i get it thanks a lot
0
SaswatPadhi's Avatar, Join Date: May 2009
~ Б0ЯИ Τ0 С0δЭ ~
My pleasure
0
mayjune's Avatar, Join Date: Jun 2009
Invasive contributor
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...
0
SaswatPadhi's Avatar, Join Date: May 2009
~ Б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: C
int sum _ARGS_((int a, int b));

Definition :
Code: C
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 by SaswatPadhi; 15Jun2009 at 18:16..
0
mayjune's Avatar, Join Date: Jun 2009
Invasive contributor
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?
0
SaswatPadhi's Avatar, Join Date: May 2009
~ Б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)