what does _ARGS_ mean in C

Go4Expert Member
12Jun2009,12:20   #1
punith's Avatar
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ЯИ Τ0 С0δЭ ~
12Jun2009,13:22   #2
SaswatPadhi's Avatar
_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_.

Go4Expert Member
12Jun2009,16:42   #3
punith's Avatar
Ok now i get it thanks a lot
~ Б0ЯИ Τ0 С0δЭ ~
12Jun2009,17:55   #4
SaswatPadhi's Avatar
My pleasure
Invasive contributor
15Jun2009,16:55   #5
mayjune's Avatar
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ЯИ Τ0 С0δЭ ~
15Jun2009,17:44   #6
SaswatPadhi's Avatar
(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..
Invasive contributor
16Jun2009,01:54   #7
mayjune's Avatar
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ЯИ Τ0 С0δЭ ~
16Jun2009,07:07   #8
SaswatPadhi's Avatar
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)