我需要在C中编写宏而不是函数
功能如下:
void FSTATUS(int stat,char msg[])
{
if(stat != 0)
{
EMH_ask_error_text(stat, &msg);
printf("Error : \"%d\",\"%s\"\n",stat,msg);
}
else
printf("\n -------- %s -------- \n",msg);
}
Run Code Online (Sandbox Code Playgroud)
因为有很少的例子可用如何在宏中使用if语句,我被困在这部分,我无法弄清楚如何将其转换为宏.任何人都可以帮我解决上面的代码.
方案:
我使用内联函数而不是宏
#define FSTATUS(stat, msg) do \
{ \
if((stat) != 0) \
{ \
EMH_ask_error_text(stat, &(msg)); \
printf("Error : \"%d\",\"%s\"\n",stat,msg); \
} \
else \
printf("\n -------- %s -------- \n",msg); \
} while (0)
Run Code Online (Sandbox Code Playgroud)
注意使用do { ... } while (0)
以确保在if
/ 之间正常工作else
.
还要注意在某些地方使用额外的括号,以避免在表达式stat
或msg
表达式时出现问题.
当然要非常清楚宏的所有缺陷 - 除非你有充分的理由,否则你真的不应该使用这种类型的函数宏.理想情况下,如果性能真的很重要,你应该使用内联函数,否则只需坚持正常的功能.
归档时间: |
|
查看次数: |
154 次 |
最近记录: |