C中的"&&"和"和"运算符

hac*_*cks 22 c operators logical-operators

我试图计算两个整数的最大公分母.

C代码:

#include <stdio.h>

int gcd(int x, int y);

int main()
{
    int m,n,temp;
    printf("Enter two integers: \n");
    scanf("%d%d",&m,&n);
    printf("GCD of %d & %d is = %d",m,n,gcd(m,n));
    return 0;  
}

int gcd(int x, int y)
{
    int i,j,temp1,temp2;

    for(i =1; i <= (x<y ? x:y); i++)
    {
        temp1 = x%i;
        temp2 = y%i;
        if(temp1 ==0 and temp2 == 0)
            j = i;
    } 
    return j;         
}
Run Code Online (Sandbox Code Playgroud)

在if语句中,请注意逻辑运算符.它and不是&&(错误地).代码工作时没有任何警告或错误.

andC中是否有运营商?我正在使用 orwellDev-C++ 5.4.2(在c99模式下).

Sha*_*our 23

&&并且and替代令牌和在功能上是相同的,从部分2.6替代令牌C++标准草案:

Alternative Primary
    and       &&
Run Code Online (Sandbox Code Playgroud)

表2中的条目之一- 替代标记,它在第2小节中说明:

在语言的所有方面,除了拼写之外,每个备选令牌的行为分别与其主令牌相同.表2中定义了替代令牌集.

正如Potatoswatter指出的那样,使用and很可能会使大多数人感到困惑,因此坚持下去可能会更好&&.

重要的是要注意,在Visual Studio C++中不是抱怨并且显然不打算.

编辑

我正在添加一个C特定的答案,因为这最初是对C++问题的答案,但已合并我在C99草案标准中添加相关引用,这是第7.9<iso646.h>节.备选拼写第1段说:

标题定义了以下十一个宏(在左侧),它们扩展为相应的标记(在右侧):

并包括这一行以及其他几行:

and    &&
Run Code Online (Sandbox Code Playgroud)

我们也可以在这里找到一个很好的参考.

更新

查看您的最新代码更新,我不确定您是否真的在C模式下编译,OrwellDev 5.4.2 的发行说明说它正在使用GCC 4.7.2.我无法将其构建到C语言模式gcc-4.7gcc-4.8使用-x cC语言模式,请参阅此处实时代码.虽然如果你评论该gcc行并使用g++它构建好.gcc如果取消注释,它也可以构建好#include <iso646.h>

  • 我不同意这对"大多数读者"来说是令人困惑的.对于那些知道C和C++足够习惯于看到"&&"但却不知道替代令牌(或C语言为iso646.h)的人来说,这只会令人困惑.对于那些了解替代令牌(稀有)或者刚开始的人来说,这并不会让人感到困惑(我认为它实际上对于后者来说实际上会更少*混淆,并且可能是数字,组最大的) (6认同)
  • 那么,另一个区别是,当你写"和"时,大多数读者会感到困惑.特别是如果你把它写成例如`int a,b和c = a;` (4认同)
  • @Potatoswatter我不认为那些实际上*是*的大多数.对于那些有其他语言经验的人来说,有很多短路逻辑运算符都有拼写出来的名称(和,或者说,不是),例如:Python(很多人赞成使用它而不是&&,具有讽刺意味的是不知道C++支持和,或,而不是) (3认同)
  • @Potatoswatter第一点是非参数,因为它同样适用于没有C++经验的人的`&&`(对于他们而言,`和`具有实际陈述其含义的优点).非运算符在右值引用中的使用是另一回事(尽管您的示例无效),当然应该避免使用. (2认同)

cho*_*ida 10

看看这里的页面 iso646.h

此标头定义了11个宏,它们是一些常见运算符的文本等价物. and是定义之一.

请注意,我只能测试这个C++编译器,所以我不确定你是否可以使用严格的C编译器.

编辑我只是一个C编译器测试它在这里和它的工作.

  • 在C++中,`<iso646.h>`标头是一个无操作; 关键字是C++中的关键字,不包含任何标题. (2认同)

Pie*_*aud 8

and只是一个替代的标记&&.

我们可以在这里轻松引用标准:

2.6替代令牌[lex.digraph]

在语言的所有方面,除了拼写之外,每个备选令牌的行为分别与其主令牌相同.表2中定义了替代令牌集.

在表2中:

   Alternative | Primary
        and    |    &&
Run Code Online (Sandbox Code Playgroud)

但我建议你使用&&.习惯于C/C++的人可能会被and...... 弄糊涂


既然它现在合并了,我们也在谈论C,你可以查看这个页面ciso646定义替代标记.

此标头定义了11个宏常量,其中包含ISO646标准字符集不支持的C++运算符的替代拼写.

从C99标准草案:

7.9替代拼写 <iso646.h>

标题定义了以下十一个宏(在左侧),它们扩展到相应的标记(在右侧):

   and    &&
Run Code Online (Sandbox Code Playgroud)


Thi*_*ser 7

基本上and只是文字版&&.但你确实需要 #include <iso646.h>.或者它不会编译.

你可以在这里阅读更多:http:
//msdn.microsoft.com/en-us/library/c6s3h5a7%28v=vs.80%29.aspx