2022-06-16 又一个奇怪的要求:宏定义多个 0 ( C语言 )

奇怪的要求千千万,回答问题长见识

问题连接:c/c++宏定义的问题

问题遇到的现象和发生背景

C/C++ 如何在预处理过程中宏定义N个0,;

问题相关代码,请勿粘贴截图

例如 #define LOOP_COUNTS(10) 0,0,0,0,0,0,0,0,0,0 这这样替换生成10个0,

运行结果及报错内容

例如我LOOP_COUNTS(5) 得到 0,0,0,0,0

我想要达到的结果

LOOP_COUNTS(N) ; 实现LOOP_COUNTS(N)替换N个0,...0;

一般来讲,宏定义都是有关加载头文件,定义函数,定义常量值,而定义多个 0 ,还是第一次听说。

其实第一个想法,是想问这东西到底用在哪里,实参,初始化表?

那传递一个 int 数组或 vector<int> 不就完了么,还要用宏,没有任何好处啊。其实第一步,可能是要改改程序的设计了。

但不是说这东西一定没用,毕竟有需求,那么给个简单的实现:只要你想,要多少 0 ,给多少 0

test 是验证,下面的循环是产生上述宏代码,只要硬盘有地儿,随意弄,一万个零,小意思。至于编译速度,就不是我要考虑的事情了。

#define Loop(X) Loop_##X
#define Loop_1 0
#define Loop_2 0, 0
#define Loop_3 0, 0, 0
#define Loop_4 0, 0, 0, 0
#define Loop_5 0, 0, 0, 0, 0
#define Loop_6 0, 0, 0, 0, 0, 0
#define Loop_7 0, 0, 0, 0, 0, 0, 0
#define Loop_8 0, 0, 0, 0, 0, 0, 0, 0
#define Loop_9 0, 0, 0, 0, 0, 0, 0, 0, 0
#define Loop_10 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

#include <iostream>
#include <vector>

auto main(int /*unused*/, char *argv[]) -> int
{
    std::vector<int> test{Loop(8)};

    for (int i = 1; i != 11; ++i)
    {
        std::cout << "#define Loop_" << i << " ";
        for (int j = 0; j != i - 1; ++j)
        {
            std::cout << "0, ";
        }
        std::cout << "0\n";
    }
    
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不停感叹的老林_<C 语言编程核心突破>

不打赏的人, 看完也学不会.

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值