#include<stdio.h>
#define MUL( a, b) a##b
int main( )
{
//static int a = 5;
// while( --a )
printf("%d",MUL(2+3,4+5));
//{
// printf("%d ",a);
// main(10);
//}
return 0;
}
OUTPUT: 41
为什么程序的输出是41? 我正在使用令牌粘贴运算符,它应合并这两个数字。 我期待输出为59但显示为41。
答案 0 :(得分:1)
更换后看起来像
printf("%d", 2+34+5) ); // 2+34+5 = 41
永远不会打印 28
。
MUL
的参数在替换之前不会评估。
答案 1 :(得分:1)
当扩展宏时,每个'##'运算符两侧的两个标记组合成一个标记。表达式不会被评估并传递给宏。
在这种情况下,扩展名为2+3 ## 4+5 i.e 2 + 34 + 5 = 41
。
答案 2 :(得分:0)
MUL(2+3,4+5)
将扩展为
2+3##4+5
是
2+34+5
评估为41。
要获得59,您需要致电MUL(5,9)
。对于偶数MUL((2+3),(4+5))
,将首先进行预处理,这将使其成为
(2+3)(4+5)
并将导致编译器错误。
MACRO在编译阶段之前被替换。