prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 17.3

这里有一个检查两个字符串是否相等的巧妙技巧

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


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管