如何使用带有未知参数的'print'宏

时间:2012-07-13 20:47:00

标签: c

此代码不起作用,但是当我放置print(7)时,这可以正常工作:

#include<stdio.h>
#define print(i) printf("%"#i"c",ch);

int main(void) 
{
    char ch ='*';
    int N;
    scanf("%d",&N);

    if (N%2 == 0)
    {
            print(N); // print(7);
    }
    else
    {

    }
}

这是编译输出

 gcc draw.c -o draw
 draw.c: In function ‘main’:
 draw.c:11: warning: unknown conversion type character ‘N’ in format

如何让代码适用于用户插入的输入。请帮忙。

1 个答案:

答案 0 :(得分:3)

问题是#运算符是预处理器的一部分。它不了解运行时值。

printf函数识别*语法,告诉它接受指定字段宽度的int参数,而不是在格式字符串中将宽度作为常量。< / p>

例如,此函数可以替换您的宏。请注意,我已将ch作为参数;我认为这样更清楚。

int print(int n, char ch) {
    return printf("%*c", n, ch);
}

就个人而言,我可能不会为此功能或宏而烦恼;我只是直接致电printf

printf("%*c", n, '*');