箭头操作员附近的额外括号

zku*_*rtz 0 c pointers parentheses

我正在尝试解码的程序包括以下行:

#define nn(sp)   ((sp)->nn)
Run Code Online (Sandbox Code Playgroud)

从上下文(未显示),我很确定'sp'是一个指向结构的指针,该结构包含'nn'作为其变量之一.

在表达式"((sp) - > nn)"中,内部括号是否可以用于任何可能的目的?如果没有,外围的括号可能也没有用处吗?

oua*_*uah 5

#define nn(sp)   ((sp)->nn)
Run Code Online (Sandbox Code Playgroud)

内括号是必需的.如果你传递一个类似于p + 10*p指向nn宏的指针,你会遇到一些没有内括号的麻烦,因为它->具有比+一元更高的优先级*.

这里不需要外括号,因为表达式涉及后缀操作,并且没有运算符比后缀运算符具有更高的优先级.