关于 define

学术版

`#define LogPow(x,mod) (POW[(int)floor(x/t)]*Pow[x-(int)floor(x/t)*t]%mod)` 把所有在后面的`x`都加上括号就好了
by 10circle @ 2021-05-06 20:46:28


如果按你这么写的话`r-l+1`会直接替换成`x`,不会有括号,会导致运算优先级出问题
by 10circle @ 2021-05-06 20:47:43


@[10circle](/user/267596) 哦,我大概懂了,是不是define直接把我的 r-l+1 复制粘贴而不是作为 x 带入的()
by _Anchor @ 2021-05-06 20:48:55


@[10circle](/user/267596) 谢谢大佬/kel
by _Anchor @ 2021-05-06 20:49:23


@[_Anchor](/user/130387) 对
by 10circle @ 2021-05-06 20:49:46


@[_Anchor](/user/130387) ```#define```执行的是非常蠢的文本替换,所以它不仅会带来优先级问题,还有其它的问题。一个经典的例子是 ```cpp #define MAX(A,B) ((A) < (B) ? (B) : (A)) int main() { int n = 10, m = 15; int k = MAX(++n, m); return 0; } ``` 这里,对```k```的初始化会被替换为 ``` int k = ((++n) < (m) ? (m) : (++n)); ``` 也就是说,`n`有可能会被递增两次。这显然与一个正常的函数``max``的行为不符。
by GKxx @ 2021-05-06 20:51:57


@[GKxx](/user/72071) 连++都会被替换掉啊/jk
by _Anchor @ 2021-05-06 20:53:11


@[GKxx](/user/72071) 懂了,谢谢
by _Anchor @ 2021-05-06 20:53:44


|