Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   what does _ARGS_ mean in C (http://www.go4expert.com/forums/args-mean-c-t17957/)

punith 12Jun2009 12:20

what does _ARGS_ mean in C
 
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 ?

SaswatPadhi 12Jun2009 13:22

Re: what does _ARGS_ mean in C
 
_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_.

:)

punith 12Jun2009 16:42

Re: what does _ARGS_ mean in C
 
Ok now i get it thanks a lot :)

SaswatPadhi 12Jun2009 17:55

Re: what does _ARGS_ mean in C
 
My pleasure :)

mayjune 15Jun2009 16:55

Re: what does _ARGS_ mean in C
 
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...

SaswatPadhi 15Jun2009 17:44

Re: what does _ARGS_ mean in C
 
(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. :)

mayjune 16Jun2009 01:54

Re: what does _ARGS_ mean in C
 
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?

SaswatPadhi 16Jun2009 07:07

Re: what does _ARGS_ mean in C
 
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)


All times are GMT +5.5. The time now is 02:07.