1

有没有办法让我完成这项工作?还是我需要使用单独的文件?

#include <iostream>                                                     // Necessary 
using namespace std;
#define long double mMaxOf2(long double min, long double max)
#define long double mMaxOf3(long double Min, long double Max, long double Mid)\
{\
     mMaxOf2(mMaxOf2((Min), (Mid), (Max)));\
}

int main()
{
    double primary;
    double secondary;
    double tertiary;
    cout << "Please enter three numbers: ";
    cin >> primary >> secondary >> tertiary;
    cout << "The maximum of " << primary << " " << secondary << " " << tertiary;
    cout << " using mMaxOf3 is " << (mMaxOf3(primary, secondary, tertiary));


    return 0;
}

问题在于 mMaxOf3,它没有被声明……嗯,也许我需要原型。

4

3 回答 3

2

多行宏需要在每行末尾有一个 \ 字符(最后一行除外)。

于 2012-10-22T04:57:46.703 回答
1

不鼓励使用宏。改用函数。除非这是一项特别希望您编写宏的家庭作业。在这种情况下,您应该知道宏基于相当简单的文本替换。他们不知道类型,也没有范围(这就是为什么不应该使用它们)。例如,确定两个整数的最大值的函数:

int max(int a, int b)
{
    return a > b ? a : b;
}

但是,执行相同操作的宏对 s 没有任何了解int,也没有范围return,对宏也没有任何意义:

#define max(a, b) (a > b ? a : b)

使用该宏意味着预处理器将简单地将您的文本替换为宏的定义。例如,如果你这样写:

max(3, 5);

预处理器将该文本转换为:

(3 > 5 ? 3 : 5)

就是这样。没有类型,没有范围,只是文本的简单复制和粘贴。你也可以这样写:

max(if, else);

并且预处理器仍然很乐意将其转换为:

(if > else ? if : else)

这是零意义。它不检查它,它不在乎。它只处理文本。我希望这现在可以清楚地说明为什么这样的事情:

#define long double mMaxOf2(long double min, long double max)

不能工作。

于 2012-10-22T06:15:24.533 回答
0

至少有两件事是错误的:

  1. 宏必须在一行中声明,因此您必须使用反斜杠 (\) 分隔行
  2. 宏也不能返回值,所以那里的“返回”不会做你想做的事。

您应该考虑复制/粘贴之类的宏。

于 2012-10-22T05:02:12.797 回答