m0_72556823 2023-01-07 00:20 采纳率: 50%
浏览 32
已结题

有什么办法比较方便的直接替换宏吗?或者看一下这个程序替换宏后的样子?

有没有什么工具或是编译器、方法之类的能自动替换宏定义?
是有一个程序为了尽可能节省字符数量用了大量宏定义,我想看懂它,但全是宏实在看不明白

#define R { return
#define P P (
#define L L (
#define T S (v, y, c,
#define C ),
#define X x)
#define F );}

int r, a;
P y, X
   R y - ~y << x;
}
Z (X
   R r = x % 2 ? 0 : 1 + Z (x / 2 F
L X
   R x / 2 >> Z (x F
#define U = S(4,13,-4,
T  t)
{
   int
      f = L t C         
      x = r;
   R
         f - 2 ?
         f > 2 ?
         f - v ? t - (f > v) * c : y :
         P f, P T  L X  C 
                          S (v+2, t  U y C  c, Z (X )))
         :
         A (T  L X  C 
                T  Z (X ) F
}
A (y, X
   R L y) - 1
      ? 5 << P y, X 
      : S (4, x, 4, Z (r) F
#define B (x /= 2) % 2 && (
D (X 
{
   int
      f,
      d,
      c = 0,
      t = 7,
      u = 14;
   while (x && D (x - 1 C  B 1))
      d = L L D (X ) C
         f = L r C
         x = L r C
         c - r || (
            L u) || L r) - f ||
            B u = S (4, d, 4, r C 
                   t = A (t, d) C
            f / 2 & B  c = P d, c C 
                              t  U t C 
                              u  U u) )
             C
         c && B
            t = P
               ~u & 2 | B
                  u = 1 << P L c C  u) C 
               P L c C  t) C
            c = r  C
         u / 2 & B 
            c = P t, c C 
            u  U t C 
            t = 9 );
   R a = P P t, P u, P x, c)) C 
                                a F
}
main ()
   R D (D (D (D (D (99)))) F

PS:这是一个在假设无限大内存没有整形上限的情况下,输出一个巨大的数字的程序,这个数字非常大,远远超越想象。所以我想知道生成这个数字的D函数的工作原理

  • 写回答

3条回答 默认 最新

  • 滴水不穿石 2023-01-07 10:07
    关注

    宏展开大概是这样子吧。标准C必须要有返回类型,我加上int为返回类型。
    但是貌似逻辑有问题,运行出错!

    #include<stdio.h>
    
    int r, a;
    int P(y, x)
    {
        return y - ~y << x;
    }
    
    int Z(x)
    {
        return r = x % 2 ? 0 : 1 + Z(x / 2);
    }
    
    int L(x)
    {
        return x / 2 >> Z(x);
    }
    
    
    int S(v, y, c, t)
    {
        int
            f = L(t),
            x = r;
        {
            return f - 2 ? f > 2 ? f - v ? t - (f > v) * c : y : P(f, P(S(v, y, c, L(x)), S(v + 2, t = S(4,13,-4, y), c, Z(x))))
                : A(S(v, y, c, L(x)),
                    S(v, y, c, Z(x)));
        }
    }
    
    int A(y, x)
    {
        return L(y) - 1
                   ? 5 << P(y, x)
                   : S(4, x, 4, Z(r));
    }
    
    int D(x)
    {
        int
            f,
            d,
            c = 0,
            t = 7,
            u = 14;
        while (x && D(x - 1), (x /= 2) % 2 && ( 1))
          d = L ( L ( D (x) ) ),
             f = L ( r ),
             x = L ( r ),
             c - r || (
                L ( u) || L ( r) - f ||
                (x /= 2) % 2 && ( u = S (4, d, 4, r ), 
                       t = A (t, d) ),
                f / 2 & (x /= 2) % 2 && (  c = P ( d, c ), 
                                  t  = S(4,13,-4, t ), 
                                  u  = S(4,13,-4, u) )
                 ),
             c && (x /= 2) % 2 && (
                t = P (
                   ~u & 2 | (x /= 2) % 2 && (
                      u = 1 << P ( L ( c ),  u) ), 
                   P ( L ( c ),  t) ),
                c = r  ),
             u / 2 & (x /= 2) % 2 && ( 
                c = P ( t, c ), 
                u  = S(4,13,-4, t ), 
                t = 9 );
        {
            return a = P(P(t, P(u, P(x, c))),
                         a);
        }
    }
    int main()
    {
        return D(D(D(D(D(99)))));
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月30日
  • 已采纳回答 1月22日
  • 创建了问题 1月7日

悬赏问题

  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示