鱼C论坛

 找回密码
 立即注册
查看: 2016|回复: 1

预编译问题

[复制链接]
发表于 2016-7-22 10:31:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*
9.5  请分析以下一组宏所定义的输出格式:
        #define NL putchar('\n')
        #define PR(format,value) printf("value=%format\t",(value))
        #define PRINT1(f,x1) PR(f,x1);NL
        #define PRINT2(f,x1,x2) PR(f,x1);PRINT1(f,x2)
        如果在程序中有以下的宏引用:
        PR(d,x);
        PRINT1(d,x);
        PRINT2(d,x1,x2);
        写出宏展开后的情况,并写出应输出的结果,设x=5,x1=3,x2=8。
*/

#include <stdio.h>
#define NL putchar('\n')
#define PR(format,value) printf("value=%format\t",(value))
#define PRINT1(f,x1) PR(f,x1);NL
#define PRINT2(f,x1,x2) PR(f,x1);PRINT1(f,x2)

int main()
{
        int x=5,x1=3,x2=8;
        PR(d,x);                         
        PRINT1(d,x);               
        PRINT2(d,x1,x2);
        return 0;
}

/*
我的思路:
1、展开:
#include <stdio.h>
#define NL putchar('\n')
#define PR(format,value) printf("value=%format\t",(value))
#define PRINT1(f,x1) PR(f,x1);NL
#define PRINT2(f,x1,x2) PR(f,x1);PRINT1(f,x2)

int main()
{
        int x=5,x1=3,x2=8;                        
        printf("x=%d\t",(x));
        printf("x=%d\t",(x));putchar('\n')
        printf("x1=%d\t",(x1));        printf("x2=%d\t",(x2));putchar('\n');
        return 0;
}

2、输出分析:
x=5        x=5tab 回车换行
x1=3        x2=8tab        回车换行
*/

--------------------------------------------------------------------------------------------------------------

gcc预编译后的代码:

省略stdio.h的代码
int main()
{
         int x=5,x1=3,x2=8;

        printf("value=%format\t",(x));
        printf("value=%format\t",(x));putchar('\n');
        printf("value=%format\t",(x1));printf("value=%format\t",(x2));putchar('\n');

        return 0;
}

---------------------------------------------------------------------------------------------------------------

从代码可以看出双引号里面的value和format没有被替换,所以程序运行不正确。

请问为什么?怎么解决?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-22 12:42:04 | 显示全部楼层
搞了一个上午,终于弄明白了。

原因是C语言规定预编译器不置换双引号里的字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 07:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表