在C中的宏(#define)中返回语句

时间:2011-09-13 10:54:32

标签: c

是否可以为以下函数编写宏:

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

我试过

#define sent_same_text(txt) return(txt);

但是出现编译错误。

3 个答案:

答案 0 :(得分:6)

简单地说:

#define sent_same_text(txt) (txt)

您只需要return个功能。宏是不同的,因为它是一个文字字符串插入代码。确保在txt周围有括号。

答案 1 :(得分:3)

宏中的return语句将从“调用”宏的函数返回。类似函数的宏是用于多次生成相同代码的简写。它们不是实际的函数调用。

以下是您可以在宏中添加回报的示例:

/* 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;
}

使用x = 25调用foo将导致返回-1,并且正在打印消息“x超出范围”。

不是说这是好风格,但希望说明宏中的返回与函数中的返回有何不同。

答案 2 :(得分:1)

#define sent_same_text(text) (text)