注册 登录
编程论坛 C++教室

带参数的宏定义

孤独城堡 发布于 2012-07-11 14:23, 482 次点击
请问以下程序哪里错了,为什么得不到想要的结果
#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)
void main()
{
    int x,x1,x2;
    x=5;
    x1=3;
    x2=8;
    PR(d,x);
    PRINT1(d,x);
    PRINT2(d,x1,x2);
}
7 回复
#2
rjsp2012-07-11 14:44
这不是很明显的错误嘛,懒得多话

程序代码:
#include <stdio.h>
#define NL putchar('\n')
#define stringer(x) #x
#define PR(format,value) printf("value=%"stringer(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;
}

#3
孤独城堡2012-07-11 16:45
可不可以说明一下
#4
zklhp2012-07-11 16:50
#是宏的一个功能 把宏参数转换成字符串 具体百度罢 我记得我看的书上没讲过这个
#5
孤独城堡2012-07-11 16:58
#define PR(format,value) printf("value=%"stringer(format)"\t",(value))
这条程序看不太明白,还有stringer函数有什么用的?我在书上找不到这个函数
#6
zklhp2012-07-11 17:30
看上一行 有这个宏的定义

这个是宏的一个用法 书上可能没有 正常
#7
zklhp2012-07-11 17:32
#define stringer(x) #x
#define PR(format,value) printf("value=%"stringer(format)"\t",(value))

#可以把参数转换成数字 如果不用这个 "%x" 不会被认为是一个可替换的部分 会被认为是一个字符串
#8
孤独城堡2012-07-11 22:23
#define stringer(x) #x
#define PR(format,value) printf("value=%"stringer(format)"\t",(value))
为什么后面那个value不用先定义或者加“#”
1