gpt4 book ai didi

c++ - 序列返回 49 但应该返回 36

转载 作者:太空宇宙 更新时间:2023-11-04 15:39:55 25 4
gpt4 key购买 nike

以下代码旨在专门返回值 36,而不是返回 49,但看不出如何或为什么。任何帮助将不胜感激。

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>

#define MUL(a,b) a*b
#define ADD(a,b) a+b

static int Func1(void)
{
static int n = 1;

// Returns 4
return n*++n;
}

int main()
{
static int Incs = Func1();

printf("%d\n", MUL(ADD(1, Incs), MUL(3, 4)));
}

最佳答案

我建议您检查预处理后的输出,因为它不会是您期望的那样。

更准确地说:

  • ADD(1, Incs) 扩展为 1+Incs
  • MUL3, 4) 扩展为 3*4
  • MUL(1+Incs, 3*4) 扩展为 1+Incs*3*4

这就是为什么建议始终在宏中的参数周围使用括号,例如

#define MUL(a,b) ((a)*(b))

更糟糕的是 Niall 在评论中指出的,因为表达式 n*++n 导致 undefined behavior .未定义的行为会使您的整个程序格式错误,并且会使任何输出变得可疑。

您真的应该阅读 Niall 提供的链接中已接受的答案。

关于c++ - 序列返回 49 但应该返回 36,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25180191/

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