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.