gpt4 book ai didi

用于返回重复一定次数的字符串的 C 预处理器宏

转载 作者:太空狗 更新时间:2023-10-29 16:37:40 29 4
gpt4 key购买 nike

有人知道任何 C99 预处理器魔法允许创建一个由另一个重复 N 次的字符串组成的字符串吗?

例如

STRREP( "%s ", 3 )

成为

"%s %s %s "

预处理后。

我自己唯一能想到的就是这样

#define STRREP( str, N ) STRREP_##N( str )    
#define STRREP_0(str) ""
#define STRREP_1(str) str
#define STRREP_2(str) str str
#define STRREP_3(str) str str str
...

效果很好,但很难看,因为我必须手动为每个重复长度定义一个宏。我想将它与可变参数宏和返回显示的宏参数数量的宏一起使用 here .

最佳答案

既然它是一个宏,而且 N 无论如何都是一个数字常量,那么这个怎么样?

#include <stdio.h>

#define REP0(X)
#define REP1(X) X
#define REP2(X) REP1(X) X
#define REP3(X) REP2(X) X
#define REP4(X) REP3(X) X
#define REP5(X) REP4(X) X
#define REP6(X) REP5(X) X
#define REP7(X) REP6(X) X
#define REP8(X) REP7(X) X
#define REP9(X) REP8(X) X
#define REP10(X) REP9(X) X

#define REP(HUNDREDS,TENS,ONES,X) \
REP##HUNDREDS(REP10(REP10(X))) \
REP##TENS(REP10(X)) \
REP##ONES(X)

int main(void)
{
printf(REP(9,0,7, "*")); // "*" repeated 907 times
printf(REP(0,9,2, "#")); // "#" repeated 92 times
printf(REP(0,0,1, "@")); // "@" repeated 1 times
return 0;
}

关于用于返回重复一定次数的字符串的 C 预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8551418/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com