给出下面程序宏展开之后的形式及其运行结果。 #include <stdio.h> #define FUDGE(k) k+3.14159266 #define PR(a) printf("a=%d\t",(int)(a)) #define PRINT(a) PR(a);putchar('\n') #define PRINT2(a,b) PR(a);PRINT(b) #define PRINT3(a,b,c) PR(a);PRINT2(b,c) #define MAX(a,b) ((a)<(b)?(b):(a)) int main() { { int x=2; PRINT(x*FUDGE(2)); } { int cel; for(cel=0;cel<=100;cel++) PRINT2(cel,9.15*cel+32); } { int x=1,y=2; PRINT3(MAX(x++,y),x,y); PRINT3(MAX(x++,y),x,y); } }
时间: 2023-06-18 21:05:49 浏览: 164
程序宏展开后的形式如下:
```c
#include <stdio.h>
#define FUDGE(k) k+3.14159266
#define PR(a) printf("a=%d\t",(int)(a))
#define PRINT(a) PR(a);putchar('\n')
#define PRINT2(a,b) PR(a);PRINT(b)
#define PRINT3(a,b,c) PR(a);PRINT2(b,c)
#define MAX(a,b) ((a)<(b)?(b):(a))
int main()
{
{
int x=2;
PRINT(x*2+3.14159266);
}
{
int cel;
for(cel=0;cel<=100;cel++)
PRINT2(cel,9.15*cel+32);
}
{
int x=1,y=2;
PRINT3(((x++)<(y)?(y):(x++)),x,y);
PRINT3(((x++)<(y)?(y):(x++)),x,y);
}
}
```
运行结果如下:
```
a=8
a=0 32
a=2 2
a=4 3
```
相关问题
. #include <stdio.h> #define S(x) x*x void main(){ int a,k=3; a=S(k+4); printf("ed\n",a);
这段代码存在一些问题,包括:
1. 宏定义 `S(x)` 的展开应该是 `x*x`,但在 `main()` 函数中却使用了 `S(k+4)`,这会导致预处理器将 `k+4*k+4` 替换为 `k+k*4+k*4+4`,即 `13`,而不是预期的 `49`。
2. `printf()` 函数中的格式控制符 `%d` 没有与要输出的变量对应,应该改为 `printf("%d\n", a);`。
修复后的代码如下所示:
```c
#include <stdio.h>
#define S(x) (x) * (x)
void main() {
int a, k = 3;
a = S(k + 4);
printf("%d\n", a);
}
```
输出结果为 `49`。
1. #include <stdio.h> #define S(x) x*x void main(){ int a,k=3; a=S(k+4); printf("%d\n",a);
这是一个简单的 C 语言程序,它的作用是计算一个表达式的值并输出。程序定义了一个宏 S(x),它的作用是将 x 的平方作为返回值。然后程序定义了一个整型变量 k 并将其赋值为 3。接下来程序计算表达式 k+4,将其作为参数传给宏 S(x),并将宏的返回值赋值给整型变量 a。最后程序使用 printf 函数输出变量 a 的值。
程序输出的结果为 49,因为宏 S(x) 实际上展开为 x*x,所以 S(k+4) 就展开为 (k+4)*(k+4),即 7*7,结果为 49。
阅读全文