问这里有一个检查两个字符串是否相等的巧妙技巧
if(!strcmp(s1, s2))这样好吗?
答这不算是什么特别好的风格,尽管它是一个流行的习语。这个测试在两个字符串相等时会成功,但“不”的使用暗示了它是在测试不相等。!(“不”)暗示它测试的是不等。
另一个选择是定义一个宏
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)然后你可以这样使用它
if(Streq(s1, s2))
另一个选择(这近乎滥用预处理器;参见问题 10.2)是定义
#define StrRel(s1, op, s2) (strcmp(s1, s2) op 0)之后你就可以说像这样的内容
if(StrRel(s1, ==, s2)) ... if(StrRel(s1, !=, s2)) ... if(StrRel(s1, >=, s2)) ...
另请参见问题 17.10。