为什么 arduino 对某些 'functions' 使用宏,比如 min()、max()、constrain()?
Why does arduino uses macros for certain 'functions' like min(), max(), constrain()?
虽然我总体上是宏的粉丝,但我不明白为什么 Arduino 制造商选择使用宏而不是实际函数来实现他们的一些算术“功能”。举几个例子:
min()
max()
constrain()
他们的网站告诉人们不要从这些“函数”中调用函数或在方括号() 中使用 pre/postfix 因为它们实际上是宏。
考虑到 arduino 语言实际上是 C++,他们可以很容易地使用(内联)函数来代替,并防止任何用户陷入众所周知的宏陷阱之一。
人们做事通常都是有原因的。而到目前为止我还没有找到这些原因。所以我的问题是:为什么 Arduino 制造商选择使用宏而不是函数?
Arduino 是基于更古老的代码和库构建的,例如 AVR-libc,其中宏在 Arduino 出现之前就被广泛使用。
在现代编程中,不推荐使用宏(相对于内联函数),因为它不进行类型检查,不检查编译错误,如果不小心处理可能会导致一些副作用。
虽然我总体上是宏的粉丝,但我不明白为什么 Arduino 制造商选择使用宏而不是实际函数来实现他们的一些算术“功能”。举几个例子:
min()
max()
constrain()
他们的网站告诉人们不要从这些“函数”中调用函数或在方括号() 中使用 pre/postfix 因为它们实际上是宏。
考虑到 arduino 语言实际上是 C++,他们可以很容易地使用(内联)函数来代替,并防止任何用户陷入众所周知的宏陷阱之一。
人们做事通常都是有原因的。而到目前为止我还没有找到这些原因。所以我的问题是:为什么 Arduino 制造商选择使用宏而不是函数?
Arduino 是基于更古老的代码和库构建的,例如 AVR-libc,其中宏在 Arduino 出现之前就被广泛使用。
在现代编程中,不推荐使用宏(相对于内联函数),因为它不进行类型检查,不检查编译错误,如果不小心处理可能会导致一些副作用。