首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >宏新手程序员

宏新手程序员
EN

Stack Overflow用户
提问于 2012-02-10 21:15:59
回答 4查看 263关注 0票数 1

我有一个实验课,这是一个问题,有人可以纠正这个程序/它运行得很快,但当它的输出是错误的。它基本上必须打印三个条件中最小的一个,以下是问题:

编写一个程序,定义宏minimum2以确定两个数值中较小的值。然后使用最小值2来比较应该定义名称最小的第三个宏,以确定最小的数目。

这是我编写的代码,它有两个错误,代码没有效果,e分配一个从未使用过的值:

代码语言:javascript
复制
#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;
}

请帮我,我很快就要考试了,我会很感激的。

EN

回答 4

Stack Overflow用户

发布于 2012-02-10 21:20:49

  1. 宏定义中需要更多括号。
  2. 您需要以某种方式使用minimum3操作的结果。
票数 5
EN

Stack Overflow用户

发布于 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

这是第一个提到的选项,运行良好:

代码语言:javascript
复制
#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;
}

产出:

代码语言:javascript
复制
2
2
票数 2
EN

Stack Overflow用户

发布于 2012-02-11 07:06:52

首先,宏不是函数,它们是文本替换。如果一个宏要生成两个数值的最小值,那么它应该生成数值,而不是一些C++表达式。

其次,最简单的方法是使用Boost.Preprocessor

代码语言:javascript
复制
#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++函数来接受变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9234907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档