加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C预处理器 – 令牌粘贴 – 令人困惑的结果.这是为什么?

发布时间:2020-12-16 06:47:12 所属栏目:百科 来源:网络整理
导读:我以为这个程序会打印值-12–2 = -10.当我运行它时,它打印0. 我想不通为什么?任何提示? #include stdio.h #define ALPHA(x,y) x##2-y int main(void) { int i = -1; int i2 = -2; printf("%d",ALPHA(i,i2)); return 0;} 解决方法 预处理阶段在任何编译之前
我以为这个程序会打印值-12–2 = -10.当我运行它时,它打印0.

我想不通为什么?任何提示?

#include <stdio.h> 
#define        ALPHA(x,y)        x##2-y 

int main(void) {
    int i = -1;
    int i2 = -2;
    printf("%d",ALPHA(i,i2));
    return 0;
}

解决方法

预处理阶段在任何编译之前完成,并在文本上完成.它没有变量或类型的概念(即编译阶段),更不用说实际值(运行时).

那么,你在做的是:

1) ALPHA(i,i2)
2) i##2-i2
3) i2-i2

因此,您最终得到的printf(“%d”,i2-i2)打印为零.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读