Ami*_*mar 3 c string-concatenation stringification c-preprocessor
我试图解决两个预处理器相关的问题,但在这两个程序中,我得到的结果是我无法弄清楚如何.以下是我的计划:
#include<stdio.h>
#define SQUARE(x) x*x
int main()
{
float s=10,u=30 ,t=2,a;
a=2*(s-u*t)/SQUARE(t);
printf("Result:%f\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
据我说,这个程序的输出应该是,-25.000
但我得到了-100.000
.
在第二个程序中:
#define FUN(i,j) i##j
int main()
{
int val1 = 10;
int val12 = 20;
clrscr();
printf("%d\n",FUN(val1,2));
getch();
}
Run Code Online (Sandbox Code Playgroud)
输出应该是,102
但我得到20
; 为什么会这样?
Ale*_* C. 11
#define SQUARE(x) x*x
Run Code Online (Sandbox Code Playgroud)
应该
#define SQUARE(x) ((x)*(x))
Run Code Online (Sandbox Code Playgroud)
实际上,如果没有括号,2*(s-u*t)/SQUARE(t)
则扩展为
2*(s-u*t)/t*t
Run Code Online (Sandbox Code Playgroud)
这被解释为
(2*(s-u*t)/t)*t
Run Code Online (Sandbox Code Playgroud)
至于你的第二个问题,FUN(val1,2)
将val12
根据##
运算符的语义进行扩展.目前还不清楚你的意图是什么:这printf
条线将被理解为
printf("%d\n", val12);
Run Code Online (Sandbox Code Playgroud)
这将打印20
.
归档时间: |
|
查看次数: |
1573 次 |
最近记录: |