加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么这个If语句即使在条件为假的情况下也会执行?

发布时间:2020-12-16 10:25:36 所属栏目:百科 来源:网络整理
导读:#includestdio.hint main() { // We use a trick involving exclusive-or to swap two variables #define SWAP(a,b) a ^= b; b ^= a; a ^= b; int x = 10; int y = 5; printf("%d%dn",x,y ); if(x 0) SWAP(x,y); printf("%d%d",y ); return 0; } 输出是: 1
#include<stdio.h>

int main()    
{    
    // We use a trick involving exclusive-or to swap two variables
    #define SWAP(a,b)  a ^= b; b ^= a; a ^= b; 

    int x = 10;
    int y = 5;
    printf("%d%dn",x,y );

    if(x < 0)
        SWAP(x,y);

    printf("%d%d",y );

    return 0;     
}

输出是:

105
515

即使条件在if(10 <0为假)中评估为假,从这个5 15即将到来的地方?

解决方法

您的SWAP宏调用将被预处理器替换.虽然它出现在一行上,但只有第一个语句是if语句的一部分.

if(x < 0)
    SWAP(x,y);

由预处理器转换为:

if(x < 0)
    a ^= b; b ^= a; a ^= b; ;

这实际上与:

if(x < 0)
    a ^= b; 
b ^= a; 
a ^= b;
;

您可以通过将宏定义中的所有语句放入块中来解决此问题,如下所示:

#define SWAP(a,b)  do { a ^= b; b ^= a; a ^= b; } while( 0 )

do / while技巧允许您使用分号跟随SWAP调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读