我想使用常数定义的位数
#define DIGITS 10
printf(%0DIGITSd \n, myvalue)
那会有用吗?如果没有,我怎么能以简单的方式做到这一点?
答案 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);