#include<stdio.h>
#include<conio.h>
#define CUBE(y)y*(y*y)
main()
{
int j;
j = CUBE(-2+4);
printf("value of j = %d",j);
getch();
}
Run Code Online (Sandbox Code Playgroud)
此代码的输出是-26.我只是想知道这段代码如何-26作为输出.如何#define在这段代码中工作.我知道#define变量或方法的永久修复值,但不知道这是如何工作的CUBE.有人可以一步一步地描述这个,简单的方法.
它确实:
j = -2 + 4 * (-2 + 4 * -2 + 4)
Run Code Online (Sandbox Code Playgroud)
CUBE的更正确定义是
#define CUBE(y) ((y)*(y)*(y))
Run Code Online (Sandbox Code Playgroud)
你应该通过使用-Eflag 来自己解决:
gcc test.c -E
# 1 "test.c"
# 1 "<command-line>"
# 1 "test.c"
main()
{
int j;
j = -2+4*(-2+4*-2+4); // <-- Check this substitution
printf("value of j = %d",j);
getch();
}
Run Code Online (Sandbox Code Playgroud)
要使用多维数据集编号,您应该使用它()来更改评估的优先级和顺序: -
#define CUBE(y) (( y )*( y )*( y ))
使用-E标志后会给出:
j = (( -2+4 )*( -2+4 )*( -2+4 ));