Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么arduino在某些情况下使用宏';功能';像min(),max(),constraint()?_C++_Arduino_Macros - Fatal编程技术网

C++ 为什么arduino在某些情况下使用宏';功能';像min(),max(),constraint()?

C++ 为什么arduino在某些情况下使用宏';功能';像min(),max(),constraint()?,c++,arduino,macros,C++,Arduino,Macros,虽然我是宏的粉丝,但我不明白为什么Arduino制造商选择使用宏而不是实际函数来实现他们的一些算术“函数”。举几个例子: min() max() constrain() 他们的网站告诉人们不要从这些“函数”中调用函数,也不要在括号()中使用pre/postfix,因为它们实际上是宏 >考虑到ARDUNO语言实际上是C++,它们可以方便地使用(内联)函数,防止任何用户陷入众所周知的宏陷阱中。 人们做事通常是有原因的。到目前为止,我还没有找到这些原因。因此,我的疑问是:为什么Arduino制造商

虽然我是宏的粉丝,但我不明白为什么Arduino制造商选择使用宏而不是实际函数来实现他们的一些算术“函数”。举几个例子:

min()
max()
constrain()
他们的网站告诉人们不要从这些“函数”中调用函数,也不要在括号()中使用pre/postfix,因为它们实际上是宏

>考虑到ARDUNO语言实际上是C++,它们可以方便地使用(内联)函数,防止任何用户陷入众所周知的宏陷阱中。


人们做事通常是有原因的。到目前为止,我还没有找到这些原因。因此,我的疑问是:为什么Arduino制造商选择使用宏而不是函数?

Arduino是基于更古老的代码和库构建的,比如宏在Arduino出现之前就被广泛使用的地方


在现代编程中,不推荐使用宏(与内联函数相比),因为它不进行类型检查,不检查编译错误,如果不仔细设计,可能会导致一些副作用。

谢谢,您还知道为什么它们从不费心将这些宏转换为函数吗?在我看来,这大约需要15分钟job@bask185当前位置这在Github上经常被作为一个问题提出来,但据我所知,他们从未这样做过。也许他们担心它会以某种方式破坏现有的代码;因为这个原因,在不同的版本中有许多古怪的结构在进行。@bask185,好吧,你对Arduino了解得越多,你就会发现有很多事情可以做得更好。就我个人而言,我觉得arduino.cc相当悠闲,例如,当他们切换到optiboot引导加载程序时,他们从不费心在arduino nano上释放1.5k闪存;他们从不费心添加一个(这个博客是我写的)来允许用户拥有浮点支持,等等。我不久前停止使用IDE并切换到CLI。IDE的文本编辑器非常不标准。他们的文件系统也有问题。我认为相对include路径和src文件夹的强制使用也属于“本可以做得更好”或至少不同的类别