【发布时间】:2016-08-26 03:52:06
【问题描述】:
我已经定义了这个宏
#define FIB(n) (( 4 << n*(3+n))/((4 << (2*n)) - (2 << n) - 1))%(2 << n)
当我试图得到答案时,它不能正常工作,例如,如果我调用 FIB(7),它给我 0,这显然是错误的。我在 python 中测试了这个函数,它工作得很好。那么,谁能解释一下为什么它不能在 C 和 C++ 中工作?
【问题讨论】:
-
你的宏甚至不带参数,所以
FIB(7)甚至没有意义,而且FIB本身只有在存在名为n的变量的范围内才能工作。 -
@BenjaminLindley 已修复,我在这里写的时候拼错了,
-
为什么不使用
constexpr递归函数呢? -
还要注意,这不是 C++ 意义上的函数,只是数学意义上的函数。宏不是函数。
-
宏函数是一个很好的方法,直到永远尝试调试。
标签: c++ macros fibonacci bit-shift