我正在通过阅读Greg Perry的C by example书来教自己C语言,我刚刚完成了第6章和第34章预处理器指令"。 在每章的最后,都要完成复习练习(以确保您了解主题的内容以及如何应用它)。
我正在进行第6章的第4次复习,我想知道这是否是正确的方法呢? (练习写在图片的顶部。)
我的问题:这是完成练习的最佳方式吗,还是有更简单的方法可以提高效率?
答案 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))
,您会发现这可能会让您大吃一惊。
通过避免使用宏可以避免所有这些问题。如今,您可以依靠现代编译器来优化代码,而无需使用宏。