【问题标题】:What are the MAX and MIN in C? #define function [closed]C中的MAX和MIN是什么? #define 函数
【发布时间】:2013-02-10 08:39:00
【问题描述】:

我是一名学生,我的老师给了我并且已经解决了学习的练习,在他的练习中我看到了这一行:

 #define MIN(a,b) ((a) < (b) ? (a) : (b))

我以前从未使用过#define。

我不明白是什么:

((a) < (b) ? (a) : (b))

代表。

看起来像“?”是一个比较不确定。有人可以帮帮我吗?

【问题讨论】:

  • 这是一个包含三元运算符的宏。这两个主题都将包含在任何关于 C 的教科书中。
  • 请注意在宏的“扩展”中每次使用参数(宏中的 a and b`)周围使用 () - 插入为文本替换(这是预处理器对它在代码中找到的每个对 MIN( a, b ) 的引用所做的事情。这是为了避免当一个宏嵌套在另一个宏中或包含如果不包含可能被误解的表达式时的不良影响展开时说()...!

标签: c++ c max c-preprocessor min


【解决方案1】:

称为条件运算符(或三元运算符)

#define MIN(a,b) ((a) < (b) ? (a) : (b))

意思:

if ((a) < (b)){   
  return a;  
} else {   
  return b; 
}

如果你愿意的话:

int test = MIN(5,10);

测试将是 5

链接到 wiki 页面的问题:http://goo.gl/bw2sL

【讨论】:

  • 非常感谢您的回答,嗯,很快。正如我所说,我是新手!真的谢谢。我从来没有听说过这个运算符。
  • 只是一点额外的帮助,这代表什么:“if (!ngames)”?条件是什么? ngames 是一个整数
  • @JoséAlgarra if(!ngames) 等价于 if(ngames==0)
  • 这会出错,例如:MIN(512, genRandomNumber()); genRandomNumber() 在测试期间被调用一次 (a)
【解决方案2】:

#define 定义了一个新的预处理器宏,在这种情况下,它是放置它的位置的 MIN 代码; ab “变量”被替换为您提供给宏作为输入的任何内容。

 #define MIN(a,b) ((a) < (b) ? (a) : (b))

 MIN(5,6);
 //gets expanded to
 ((5) < (6) ? (5) : (6))

实际的表达式使用三元运算符,根据表达式的计算返回 A 或 B,您可以在此处阅读更多信息:

http://en.cppreference.com/w/cpp/language/operator_other

最后,当您用 c++ 标记问题时,请考虑非宏 max 和 min 函数。

#include <algorithm>
...
int i=std::min(5,6);

【讨论】:

  • 感谢您的回答,我正在寻找链接确实有帮助。
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 2012-11-05
  • 2015-08-16
  • 2017-08-06
  • 2019-08-25
  • 2012-08-26
  • 1970-01-01
  • 2019-09-21
相关资源
最近更新 更多