C语言#define定义函数优先级怎么算的?

C语言#define定义函数优先级怎么算的?,第1张

宏只是把所有参数连接起来,拼成一个表达式而已

你这里直接把x和y代入进去就知道问题在哪里了

原来的表达式为:a + b a - b

改了之后为:(a + b) (a - b)

所以你如果用宏的话,最好这样写:#define M(x, y) (x) (y)

这样就不会出现这种错误了

优先级高到低:

第一级:圆括号()、下标运算符[]、分量运算符的指向结构体成员运算符->、结构体成员运算符。

第二级:逻辑非运算符!、按位取反运算符~、自增自减运算符++ --、负号运算符-、类型转换运算符(类型)、指针运算符和取地址运算符和&、长度运算符sizeof。

第三级:乘法运算符、除法运算符/、取余运算符%。

第四级:加法运算符+、减法运算符-。

第五级:左移动运算符<<、右移动运算符>>。

第六级:关系运算符< > <= >= 。

第七级:等于运算符==、不等于运算符!=。

第八级:按位与运算符&。

第九级:按位异或运算符^。

第十级:按位或运算符|。

第十一级:逻辑与运算符&&。

第十二级:逻辑或运算符||。

第十三级:条件运算符:。

第十四级:赋值运算符= += -= = /= %= >>= <<= &= |= ^=。

第十五级:逗号运算符,。

扩展资料

优先级与求值顺序无关。如(a+b)&&(bc),虽然优先级最高,但这个表达式求值顺序是从左到右。优先级从上到下依次递减,最上面具有最高的优先级,逗号 *** 作符具有最低的优先级。

相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。

基本的优先级需要记住:指针最优,单目运算优于双目运算。如正负号。先算术运算,后移位运算,最后位运算。1<<3+2&7等价于 (1<<(3+2))&7。逻辑运算最后结合。

-运算符

-运算符优先级

寻找一个参数完全匹配的函数,如有,则调用它

如果失败,寻找一个函数模板,使其实例化,产生一个匹配的模板函数,若有,则调用它

如果失败,再试低一级的对函数重载的方法,例如通过类型转换可产生的参数匹配等,若找到匹配的函数,调用它

如果失败,则证明这是一个错误的调用。

也就是说,

1完全匹配的函数;

2摸板函数;

3重载函数;

4没有匹配的调用

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12183396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存