这是使用#define的最佳方式吗?

时间:2016-07-28 18:38:49

标签: c

我正在通过阅读Greg Perry的C by example书来教自己C语言,我刚刚完成了第6章和第34章预处理器指令"。 在每章的最后,都要完成复习练习(以确保您了解主题的内容以及如何应用它)。

我正在进行第6章的第4次复习,我想知道这是否是正确的方法呢? (练习写在图片的顶部。)

The code I wrote for the exercise

我的问题:这是完成练习的最佳方式吗,还是有更简单的方法可以提高效率?

1 个答案:

答案 0 :(得分:1)

使用rotation(T); 的最佳方式是不再使用的功能示例:)

但是如果你坚持使用#define,你应该记住宏的扩展不尊重宏的边界。它只是将标记插入到输入流中。因此,您必须始终用括号括起表达式,如果宏接受参数,您也应该用括号括起来。

在你的情况下:

#define

如果你不这样做,那么你会对#define TOTAL (NO0 + NO1 + NO2 + NO3 + NO4 + NO5 + NO6 + NO7 + NO8 + NO9) 的结果感到惊讶,你的定义将导致36而不是预期的4。

类似地:

TOTAL / 10
如果您将其称为#define SQUARE(x) x * x

将无法生成正确的结果。你需要使用:

SQUARE(y + 1)

即便如此,如果您将其称为#define SQUARE(x) ((x) * (x)) ,您会发现这可能会让您大吃一惊。

通过避免使用宏可以避免所有这些问题。如今,您可以依靠现代编译器来优化代码,而无需使用宏。