我有一个实验课,这是一个问题,有人可以纠正这个程序/它运行得很快,但当它的输出是错误的。它基本上必须打印三个条件中最小的一个,以下是问题:
编写一个程序,定义宏
minimum2以确定两个数值中较小的值。然后使用最小值2来比较应该定义名称最小的第三个宏,以确定最小的数目。
这是我编写的代码,它有两个错误,代码没有效果,e分配一个从未使用过的值:
#include <stdio.h>
#include <conio.h>
#define minimum2(a,b)(a < b)?a:b
#define minimum3(a,b,c) minimum2(a,b) < c? minimum2(a,b):c
int main()
{
int c = 3, d = 4, e = 2;
minimum3(c, d, e);
getch();
return 0;
}请帮我,我很快就要考试了,我会很感激的。
发布于 2012-02-10 21:20:49
minimum3操作的结果。发布于 2012-02-10 21:22:28
minimum2(a,b)被(a < b) ? a : b取代,这意味着您应该:
#define minimum2(a,b) ((a < b) ? a : b)minimum2的地方,就像这样:
#define minimum3(a,b,c) (minimum2(a,b)) < c ? (minimum2(a,b)) : c这是第一个提到的选项,运行良好:
#include <stdio.h>
#define minimum2(a,b) ( (a < b) ? a : b )
#define minimum3(a,b,c) minimum2(a,b) < c ? minimum2(a,b) : c
int main()
{
printf("%d\n", minimum3(2, 3, 4));
printf("%d\n", minimum3(3, 4, 2));
return 0;
}产出:
2
2发布于 2012-02-11 07:06:52
首先,宏不是函数,它们是文本替换。如果一个宏要生成两个数值的最小值,那么它应该生成数值,而不是一些C++表达式。
其次,最简单的方法是使用Boost.Preprocessor
#define minimum2(a,b) BOOST_PP_IF(BOOST_PP_LESS(a,b), a, b)
#define minimum3(a,b,c) minimum2(minimum2(a,b), c) 这将接受从0到256的文字数字。它不接受变量。宏不理解变量。您必须编写C++函数来接受变量。
https://stackoverflow.com/questions/9234907
复制相似问题