MACRO内部工作

时间:2014-06-06 10:43:32

标签: c

#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。

3 个答案:

答案 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在编译阶段之前被替换。