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)));
}
我建议你检查预处理的输出,因为它不会是你所期望的.
更确切地说:
ADD(1, Incs) 扩展到 1+IncsMUL3, 4) 扩展到3*4MUL(1+Incs, 3*4) 扩展到 1+Incs*3*4这就是为什么建议总是在宏中的参数周围使用括号,比如
#define MUL(a,b) ((a)*(b))
更糟糕的是Niall在评论中指出的内容,因为该表达式n*++n会导致未定义的行为.未定义的行为会使整个程序格式不正确,并且会使任何输出都受到怀疑.
您应该真正阅读Niall提供的链接中接受的答案.