Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

return statement in macro(#define) in C

Tags:

c

Is it possible to write a macro for the following function:

char *sent_same_text(char *txt)
{
    return txt;
}

I tried

#define sent_same_text(txt) return(txt);

but getting compilation error.

like image 421
Raja Avatar asked May 13 '26 22:05

Raja


2 Answers

Simply do:

#define sent_same_text(txt) (txt)

You only need return for functions. A macro is different in that it is a literal string insertion into your code. Make sure you have the parentheses around txt.

like image 135
flight Avatar answered May 15 '26 18:05

flight


A return statement in a macro will return from the function that "calls" the macro. Function-like macros are shorthand for generating the same code multiple times. They are not actual function calls.

Here's an example of why you might put a return in a macro:

/* do-while() loop is a trick to let you define multi-statement macros and */
/* call them like functions. Note the lack of trailing ';' */
#define ERROR(msg) do{ fprintf(stderr, (msg)); errorCount++; return -1; }while(0)

/* foo() returns 0 or success or -1 on failure */
int foo(int x, int y){
   if ( x < 10 )
   {
      ERROR("x is out of range\n");
   }
   if ( y < 20 )
   {
      ERROR("y is out of range\n");
   }
   doSomething(x,y);
   return 0;
}

Calling foo with x = 25 would result in a return of -1, and the message "x is out of range" being printed.

Not saying that is good style, but hopefully illustrates how a return in a macro is different from a return in a function.

like image 28
Brian McFarland Avatar answered May 15 '26 19:05

Brian McFarland



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!