【发布时间】:2021-06-12 12:57:07
【问题描述】:
我正在使用以下printf 函数:
printf("%-8s%-21s%-17s%-6s\n", "index", "Name", "Effect", "Type");
但是,我想使用预定义的宏来代替“8”:
#define NAME_SIZE 8
当我尝试替换它时,IDE 无法识别它并给出错误:Invalid conversion specifier N(宏的第一个字母)。我尝试将宏名称放在() 括号中或在这些括号中放置一个间隔,但也没有用。所以我想知道:甚至可以将宏作为参数放入printf 函数中,如果可以,如何?对于这么奇怪的问题,我很抱歉,但我找不到任何信息。
【问题讨论】:
-
你试过编译吗?有时 IDE 会显示误报。
-
如果你可以定义为
"8",那么printf("%-"NAME_SIZE"s%-21s%-17s%-6s\n", "index", "Name", "Effect", "Type");会做你想做的事吗? -
您可以使用
*代替显式数字并将值作为int参数传递到相应字符串之前:printf("%-*s%-21s%-17s%-6s\n", (int)(NAME_SIZE), "index", "Name", "Effect", "Type"); -
@Yunnosch 我将宏用于数组大小,所以它不能完全按照我想要的方式工作。不过还是谢谢你。
-
@chqrlie 这就是我需要的!谢谢!