是否可以为以下函数编写宏:
char *sent_same_text(char *txt)
{
return txt;
}
我试过
#define sent_same_text(txt) return(txt);
但是出现编译错误。
答案 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)