序列返回49但应返回36

Nex*_*xuz 0 c++ math console visual-c++

以下代码旨在专门返回值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)));
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

我建议你检查预处理的输出,因为它不会是你所期望的.

更确切地说:

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

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

#define MUL(a,b) ((a)*(b))
Run Code Online (Sandbox Code Playgroud)

更糟糕的是Niall在评论中指出的内容,因为该表达式n*++n会导致未定义的行为.未定义的行为会使整个程序格式不正确,并且会使任何输出都受到怀疑.

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