在sprintf中的字符串内的C宏

时间:2013-07-07 13:39:32

标签: c macros padding printf

我使用宏来格式化字符串副本。实例如下。下面给出的代码尝试在字符串的剩余部分填充空字符。

#include <stdio.h>

#define LEN     10
#define str(x)  #x

void main() {
    char a[LEN];
    int b = 3445;

    sprintf(a, "%-"str(LEN)"d", b);     // I want "%-10d" here
    printf("|%s|", a);
}

当我使用gcc -Wall prog.c编译它时会发出以下警告。

warning: format ‘%LE’ expects argument of type ‘long double’, but argument 3 has type ‘int’ [-Wformat]

这意味着宏未被正确替换。谁能帮到我这里有什么问题。

1 个答案:

答案 0 :(得分:6)

您必须再次评估str的参数才能看到字符串中的10

#define LEN     10
#define str_(x)  #x
#define str(x)  str_(x)

你这样做的方式,str的参数直接变为字符串,因此LEN以格式到达。