【发布时间】:2010-06-25 12:36:50
【问题描述】:
Windows SDK 具有 SUCCEEDED 宏:
#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
-----------------------^-------------^-----
显然,与其他宏一样,括号可确保编译器正确解释意图。
我不明白为什么(HRESULT)(hr) 周围有括号(我用^ 字符标记它们)。 hr 用括号括起来,以便可以有一些复杂的构造,HRESULT 用括号括起来以形成 C 风格的转换,然后整个 >= 构造也用括号括起来,那么为什么在 (HRESULT)(hr) 周围多出一对括号?
【问题讨论】:
-
对过于迂腐的编辑表示歉意,但每次我在主页上看到问题标题时,我都感到很烦......
-
@AakashM:由于我的母语不是英语,所以我不得不问:“大括号”和“括号”有什么区别?我到处都看到像“你需要在你的宏中正确地支持参数”这样的短语。为什么“大括号”这个词在这里不合适?
-
@sharptooth:“大括号”通常(但并非总是)表示
{},有时也称为“大括号”。 “括号”通常表示(),有时也称为“圆括号”。 “方括号”有时用于表示[]或<>,有时也称为“方括号”和“尖括号”。这三个术语通常可以互换使用。英语不如 C++ 精确。 -
@sharptooth:在一般英语使用中,这些是括号:
(),这些是括号:[],这些是大括号:{}。 “括号”的使用有一定的灵活性,但我不记得以前看到过“大括号”的意思是“括号”。 -
@sharptooth 另见catb.org/jargon/html/A/ASCII.html ;基本上,正如@Mike Seymour 所说,但对我个人而言,将
()称为“大括号”的互换性太过分了:) 我通常会原谅“括号”,因为这是英语(和数学)所说的,但如果我们不能迂腐的我们可以在哪里......
标签: c com macros c-preprocessor