none
一个关于宏的问题? RRS feed

  • 问题

  • 在某帮助文档里看到宏定义的错误处理函数如下: #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) 为什么要用do while(0)? 这样定义: #define handle_error(msg) \ { perror(msg); exit(EXIT_FAILURE); } 不可以吗?
    2010年2月20日 11:14

答案

  • 这个是因为部分古老的C编译器不支持这种直接加大括号的代码格式,加上do,while(0)以规避这种现象。不过现在无所谓了,这样写可能只是一种习惯了。
    0xBAADF00D
    • 已标记为答案 Nancy Shao 2010年2月24日 3:38
    2010年2月21日 1:45
    版主

全部回复