【问题标题】:output of the following code related to macros [duplicate]以下与宏相关的代码的输出[重复]
【发布时间】:2016-12-19 01:20:47
【问题描述】:

请解释一下输出——我得到的输出是 20, 但如果我没记错的话应该是 64。

#include<stdio.h>
#define SQUARE(X) (X*X) 
main() 
{ 
    int a, b=6; 
    a = SQUARE(b+2); 
    printf("\n%d", a);
}

【问题讨论】:

  • 你错了——应该是 20。运行cc -E code.c 并查看 SQUARE 的扩展。
  • 顺便说一句,您需要小心使用魔术引号 “\n%d” 与常规引号 "%d\n" — C 编译器不会接受魔术引号。您通常应该用换行符结束输出行,而不是或者也应该用换行符开始行。您应该在main() 上使用显式返回类型——int(参见What should main() return in C and C++?)。

标签: c


【解决方案1】:

正确的结果是 20。

宏是简单的文本替换。

要查看结果为 20,只需将 X 替换为 b+2。那么你有:

b+2*b+2

因为b 是 6 是

6+2*6+2

20

使用宏时,使用括号很重要,这样宏应该看起来像

# define SQUARE(X) ((X)*(X)) 

那么结果将是64,因为评估是

(b+2)*(b+2)

(6+2)*(6+2)

8*8

64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多