关于if语句中Ql_StrPrefixMatch返回值判定逻辑的疑问
C语言if语句对整数返回值的判定逻辑
问题相关代码
首先看你提到的if判断代码:
if( Ql_StrPrefixMatch(strURC, urcHead) ) { callback_NTPCMD((char*)strURC); }
以及Ql_StrPrefixMatch的实现:
s32 Ql_StrPrefixMatch(const char* str, const char *prefix) { for ( ; *str != '\0' && *prefix != '\0' ; str++, prefix++) { if (*str != *prefix) { return 0; } } return *prefix == '\0'; }
核心解答
在C语言规则里,if语句会把0判定为假(False),任何非零值判定为真(True),结合这个函数的返回值具体分析:
- 当函数返回0时:要么是匹配过程中发现字符不相等(直接return 0),要么是循环结束后
*prefix还没到字符串末尾(说明str比prefix短,前缀匹配失败),此时if条件为假,不会执行callback_NTPCMD。 - 当函数返回非零值时:只有一种情况——循环结束后
*prefix == '\0'成立,也就是prefix的所有字符都和str的开头部分匹配完成,此时这个表达式的结果是1(C语言中关系表达式为真时返回int类型的1),if判定为真,执行callback_NTPCMD。
简单来说,这个函数的返回值可理解为:0代表前缀匹配失败,1代表匹配成功,if语句通过返回值的0/非0状态决定是否执行后续代码块。
内容的提问来源于stack exchange,提问作者Ibrahim
相关产品推荐
相关产品推荐

