宏新手程序员
Macros Rookie Programmer
我有一个实验室类,这是一个问题,有人能纠正这个程序吗?它运行正常,但当它的输出错误时。它基本上必须打印三个条件中最小的一个,问题是:
编写一个程序,定义一个宏
minimum2
,以确定两个数值中较小的一个。然后使用最小值二来比较第三个宏,应该定义名称最小值三来确定最小值。
这是我写的代码,它有两个错误代码没有效果,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;
}
请帮我,我很快就要考试了,对此我将不胜感激。
- 宏定义中需要更多的括号
- 您需要以某种方式使用
minimum3
操作的结果
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("%dn", minimum3(2, 3, 4));
printf("%dn", minimum3(3, 4, 2));
return 0;
}
输出:
2
2
首先,宏不是函数,而是文本替换。如果宏要生成两个数值中的最小值,它应该生成数值,而不是某些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++函数来接受变量。
#define minimum2(a,b)((a) < (b))?(a):(b)
#define minimum3(a,b,c) minimum2((a),(b)) < (c)? minimum2((a),(b)):(c)
以及我们的课程,您需要输出您的结果:
printf("m3:%dn", minimum3(c, d, e));
相关文章:
- 为什么程序员同时使用 std::bad_alloc 和 std::exception.是否 std::例外 仅是不够的
- C++std::atomic在程序员级别保证了什么
- 如何检查程序员在C++中提供的两种不同格式的输入
- 为什么 C++ 程序员更喜欢前缀 ++,而 Java 程序员更喜欢后缀 ++?
- 程序员可以用 C++ 编写多少个嵌套结构
- 如果/else语句未显示/可变分配问题的输出;初学者程序员
- 安装/理解c++库的问题(新手程序员)
- 初学者程序员 c++(局部与全局变量声明)
- 工资计算器(加班工资)需要高级程序员的帮助
- 是否有任何合理的场景,程序员可能希望避免布尔表达式的短路计算
- 面向C++程序员的 SQL 简介
- 我想知道根据程序员的哲学在哪里声明变量
- c#程序员在c++中尝试事件
- 新的Linux程序员 - 尝试开发库
- 有没有一种非重复的方法允许程序员在成员初始化的复制和移动语义之间进行选择
- 作为一名初级程序员,我该如何开始制作桌面应用程序
- 返回 1 与返回 0(用户和程序员)
- 视觉C++:我可以强制我的程序员为每个类定义复制构造函数吗?
- 宏新手程序员
- 新手程序员的基本C++问题