gpt4 book ai didi

c - 我陷入了c编程的困境,没有代码的概念

转载 作者:行者123 更新时间:2023-11-30 19:54:36 25 4
gpt4 key购买 nike

# define swap(a,b) temp=a; a=b; b=temp;    
main( )
{
int i, j, temp;
i=5;
j=10;
temp=0;
if( i > j)
swap( i, j );
printf( "%d %d %d", i, j, temp);
}

执行上面的代码后,我得到了意外的输出,我没有得到这背后的确切逻辑。所以请大家帮助我。

以上代码的输出:

10 0 0

最佳答案

swap 不是 C 函数,而是预处理器按原样插入宏到宏调用的位置,因此代码如下所示:

if( i > j)
temp=i; i=j; j=temp;;

重新格式化后代码是

if( i > j)
temp=i;
i=j;
j=temp;
;

如果条件为真,则仅完成对 temp 的赋值,其他两个赋值始终无条件完成。

这可以通过两种方式解决:将宏调用放在语句 block 内:

if( i > j)
{
swap( i, j );
}

或者使宏体成为一个 block :

#define swap(a,b) do { temp=(a); (a)=(b); (b)=temp; } while (0)

将多语句宏放在 do { ... } while (0) 语句中的惯例是因为否则您会得到一个空语句(就像现在所做的那样,请参见上文),这将宏扩展为例如的一部分时可能会导致问题if else 语句。

关于c - 我陷入了c编程的困境,没有代码的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28476014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com