Dan*_*hev 0 c c++ macros printf
我正在使用以下printf功能:
printf("%-8s%-21s%-17s%-6s\n", "index", "Name", "Effect", "Type");
Run Code Online (Sandbox Code Playgroud)
但是,我想使用预定义的宏而不是“8”:
#define NAME_SIZE 8
Run Code Online (Sandbox Code Playgroud)
当我尝试替换它时,IDE 无法识别它并给出错误:(Invalid conversion specifier N宏的第一个字母)。我尝试将宏名称放在()括号中或放置一个间隔,但也不起作用。所以我想知道:甚至可以将宏作为参数放入printf函数中,如果是,如何?我很抱歉提出这样一个奇怪的问题,但我找不到任何信息。
是的,您确实可以这样做(尽管在您的特定情况下,您可以传递参数宽度,这是一种更好的方法)。实际上,C 和 C++ 的一些标准库利用了这一点(或者换句话说,将其视为合法技术),例如使用 PRId64 来正确格式化 int64_t:
#include <inttypes.h>
int64_t t = 0;
printf("%" PRId64 "\n", t);
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你需要
#define NAME_SIZE "8"
Run Code Online (Sandbox Code Playgroud)
随着
printf("%-"NAME_SIZE"s%-21s%-17s%-6s\n", "index", "Name", "Effect", "Type");
Run Code Online (Sandbox Code Playgroud)