4

我使用宏进行格式化字符串复制。下面给出示例。下面给出的代码尝试在字符串的剩余部分填充空字符。

#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]

这意味着宏没有被正确替换。任何人都可以在这里帮助我这里有什么问题。

4

1 回答 1

6

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

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

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

于 2013-07-07T13:43:26.490 回答