我有一个实验课,这是一个问题,可以有人纠正这个程序/它运行正确,但当它的输出是错误的。它基本上必须打印三个条件中最小的一个,这是问题:
编写定义宏
minimum2
的程序,以确定两个数值中较小的一个。然后使用最小值2来比较应该定义名称最小值为3的第三个宏来确定最小数量。
这是我写的代码,它有两个错误代码没有效果,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;
}
请帮助我,我很快就会参加考试,并对此感激不尽。
答案 0 :(得分:5)
minimum3
操作的结果。答案 1 :(得分:2)
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
答案 2 :(得分:0)
首先,宏不是函数,它们是文本替换。如果一个宏要产生两个数值的min,它应该产生数值而不是一些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 ++函数来接受变量。
答案 3 :(得分:-2)
#define minimum2(a,b)((a) < (b))?(a):(b)
#define minimum3(a,b,c) minimum2((a),(b)) < (c)? minimum2((a),(b)):(c)
我们当然需要输出结果:
printf("m3:%d\n", minimum3(c, d, e));