+ -
当前位置:首页 → 问答吧 → 逻辑与、逻辑或 非常基础的一个问题!

逻辑与、逻辑或 非常基础的一个问题!

时间:2010-09-03

来源:互联网

本帖最后由 zhangsuozhu 于 2010-09-03 16:39 编辑
  1. #include <stdio.h>
  2. int test1(char *p)
  3. {
  4.     if (!p) {
  5.         printf("test1: p is NULL\n");
  6.         return 0;
  7.     }
  8.     printf("test1: p isn't NULL\n");
  9.     return 1;
  10. }

  11. int test2(char *p)
  12. {
  13.     if (!p) {
  14.         printf("test2: p is NULL\n");
  15.         return 0;
  16.     }
  17.     printf("test2: p isn't NULL\n");
  18.     return 1;
  19. }

  20. int main()
  21. {
  22.     char *p = NULL;
  23.     if (p && test1(p) && test2(p))
  24.         ;
  25.     p = "hehe!";
  26.     if (p || test1(p) || test2(p))
  27.        ;
  28.     return 0;
  29. }
复制代码
从中可以看出:
  1. if (p && test1(p) && test2(p));
复制代码
只要判断出一个条件为假,后面的就不运行了,即二个test都没有执行。
  1. if (p || test1(p) || test2(p));
复制代码
只要判断出一个条件为真,后面的就不判断了。

我的问题是,C语言里是否有这样的标准!即 逻辑与 中,从左向右依次求表达的的值,如果有一个为假,就直即返回整个表达式。
逻辑或,从左向右依次求表达的的值,如果有一个为真,就直即返回整个表达式。

作者: zhangsuozhu   发布时间: 2010-09-03

逻辑短路啊。

作者: 论坛ID   发布时间: 2010-09-03

标准是那样的

作者: hellioncu   发布时间: 2010-09-03

对,短路

作者: liwangli1983   发布时间: 2010-09-03

C标准是吧。那我可就放心的用啦。以后就这样用不会产生问题是吧?
  1. if (p && *p) printf("%s\n", p);
复制代码
一定是先查p如果是空就不查 *p了是吧!

作者: zhangsuozhu   发布时间: 2010-09-03

不同编译器没有从右往左的吧。

作者: zhangsuozhu   发布时间: 2010-09-03

相关阅读 更多