Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么要打右旋球_C - Fatal编程技术网

C 为什么要打右旋球

C 为什么要打右旋球,c,C,请参阅以下C代码片段: PM_RAISE(retexn, exn) do { retexn = (exn); gVmGlobal.errFileId = __FILE_ID__; gVmGlobal.errLineNum = (uint16_t)__LINE__; } while (0) 在第4行,为什么exn用括号括起来 EDIT(回复IntermediateHacker)

请参阅以下C代码片段:

PM_RAISE(retexn, exn)
        do
        {
            retexn = (exn);
            gVmGlobal.errFileId = __FILE_ID__;
            gVmGlobal.errLineNum = (uint16_t)__LINE__;
        } while (0)
在第4行,为什么
exn
用括号括起来

EDIT(回复
IntermediateHacker
)以下是原始代码片段:

#if __DEBUG__
#define PM_RAISE(retexn, exn) \
        do \
        { \
            retexn = (exn); \
            gVmGlobal.errFileId = __FILE_ID__; \
            gVmGlobal.errLineNum = (uint16_t)__LINE__; \
        } while (0)
#else
#define PM_RAISE(retexn, exn) \
        retexn = (exn)
#endif

将宏参数括在括号中被认为是很好的做法。在您的示例中,这没有多大帮助,但可以说您有:

#define multiply(a, b) a * b
并将其用于:

multiply(4 + 3, 2)
它将扩展到

4 + 3 * 2

这显然不是预期的结果(3将首先乘以2)。

将宏参数括在括号中被认为是良好的做法。在您的示例中,这没有多大帮助,但可以说您有:

#define multiply(a, b) a * b
并将其用于:

multiply(4 + 3, 2)
它将扩展到

4 + 3 * 2

这显然不是预期的结果(3将首先乘以2)。

好吧,这是我的猜测工作,但我认为它可以作为
exn
输入算术表达式

我的意思是:

/ * If I use: */
PM_RAISE( whatever, 18 / 9 + 5 );

/* It will generate */
whatever = (18 / 9 + 5);

/* which is good. */

此外,在@James指出的宏函数中包含括号也是一种很好的做法。

好吧,这是我的猜测工作,但我认为它可以作为
exn
输入算术表达式

我的意思是:

/ * If I use: */
PM_RAISE( whatever, 18 / 9 + 5 );

/* It will generate */
whatever = (18 / 9 + 5);

/* which is good. */

此外,在@James指出的宏函数中包含括号也是一种很好的做法。

这可能是一些宏或定义。显示更多代码。对我来说,它看起来像一个宏定义,所以您可以将其重新格式化,包括
#define
?这是一个宏吗?您是否省略了
#define
和\s?@IntermediateHacker:我又添加了一些代码。我看不到更多相关内容。可能是一些宏或定义。显示更多代码。对我来说,它看起来像一个宏定义,所以您可以将其重新格式化,包括
#define
?这是一个宏吗?您是否省略了
#define
和\s?@IntermediateHacker:我又添加了一些代码。我看不到更多相关的东西。没有括号,它只会是
whatever=18/9+5。这有什么不对?如果没有括号,它只会是
whatever=18/9+5。怎么了?