使用常量定义的数字

时间:2014-06-09 13:35:53

标签: c constants c-preprocessor digits

我想使用常数定义的位数

    #define DIGITS 10
    printf(%0DIGITSd \n, myvalue)

那会有用吗?如果没有,我怎么能以简单的方式做到这一点?

3 个答案:

答案 0 :(得分:4)

你在字符串周围缺少引号。

在C中,字符串实际上是由字符串文字的序列指定的。所以你可以这样做:

#define DIGITS "10"

printf( "%0" DIGITS "d\n", myvalue );

预处理器还可以从其他标记(例如数字)生成字符串。检查 stringize运算符#),但我建议只在您真正需要时使用它。

答案 1 :(得分:4)

您可以将宽度作为参数传递给printf

 printf("%0*d \n", DIGITS, myvalue)

答案 2 :(得分:1)

不,它不会以这种方式工作,宏名称不会在字符串文字中插入。

我认为除非您执行#define DIGITS "10"或生成(部分)源文件,否则无法在C中执行此操作。或者如果DIGITS是0到10之间的十进制常量,请尝试这个hack:

#define DIGITS 10
#define STR_0 "0"
#define STR_1 "1"
#define STR_2 "2"
#define STR_3 "3"
#define STR_4 "4"
#define STR_5 "5"
#define STR_6 "6"
#define STR_7 "7"
#define STR_8 "8"
#define STR_9 "9"
#define STR_10 "10"
#define STR(i) STR_##i

...
  printf("%0" STR(DIGITS) "d\n", myvalue);