作者loveflames (咕啾咕啾魔法陣)
看板C_and_CPP
標題Re: [問題] 能不能用macro做到這件事
時間Tue May 18 04:01:15 2010
※ 引述《acrt3820 (晰晰)》之銘言:
: ※ 引述《loveflames (咕啾咕啾魔法陣)》之銘言:
: : 其實是為了嘗試不用template在編譯期算出1+...+10
: : 差在不能取之前定義的值
: 以下提供一種解法 不知道是否符合需求
: 可利用 __INCLUDE_LEVEL__ 這個macro 取得目前include深度
: 不過這個是 gnu c 的preprocessor限定
: 但其他的preprocessor可能也會有類似的東西可以用
有強者教我用加法器實作
C是次數
zzz用來判斷是否結束
x0~x7從1遞增到10
#undef懶得打
---------------------------------------------------
#ifndef zzz
#define C 10
#include <stdio.h>
#define sum0 0
#define sum1 0
#define sum2 0
#define sum3 0
#define sum4 0
#define sum5 0
#define sum6 0
#define sum7 0
#define x0 1
#define x1 0
#define x2 0
#define x3 0
#define x4 0
#define x5 0
#define x6 0
#define x7 0
#define y0 1
#define y1 0
#define y2 0
#define y3 0
#define y4 0
#define y5 0
#define y6 0
#define y7 0
#define sum sum0+sum1*2+sum2*4+sum3*8+sum4*16+sum5*32+sum6*64+sum7*128
#define zzz x0+x1*2+x2*4+x3*8+x4*16+x5*32+x6*64+x7*128
#endif
#if zzz>C
int main(){
printf("%d\n",sum);
return 0;
}
#endif
#if zzz<=C
#define ca 0
#if sum0+ca+x0==0
#define sum0 0
#define ca 0
#elif sum0+ca+x0==1
#define sum0 1
#define ca 0
#elif sum0+ca+x0==2
#define sum0 0
#define ca 1
#else
#define sum0 1
#define ca 1
#endif
#if sum1+ca+x1==0
#define sum1 0
#define ca 0
#elif sum1+ca+x1==1
#define sum1 1
#define ca 0
#elif sum1+ca+x1==2
#define sum1 0
#define ca 1
#else
#define sum1 1
#define ca 1
#endif
#if sum2+ca+x2==0
#define sum2 0
#define ca 0
#elif sum2+ca+x2==1
#define sum2 1
#define ca 0
#elif sum2+ca+x2==2
#define sum2 0
#define ca 1
#else
#define sum2 1
#define ca 1
#endif
#if sum3+ca+x3==0
#define sum3 0
#define ca 0
#elif sum3+ca+x3==1
#define sum3 1
#define ca 0
#elif sum3+ca+x3==2
#define sum3 0
#define ca 1
#else
#define sum3 1
#define ca 1
#endif
#if sum4+ca+x4==0
#define sum4 0
#define ca 0
#elif sum4+ca+x4==1
#define sum4 1
#define ca 0
#elif sum4+ca+x4==2
#define sum4 0
#define ca 1
#else
#define sum4 1
#define ca 1
#endif
#if sum5+ca+x5==0
#define sum5 0
#define ca 0
#elif sum5+ca+x5==1
#define sum5 1
#define ca 0
#elif sum5+ca+x5==2
#define sum5 0
#define ca 1
#else
#define sum5 1
#define ca 1
#endif
#if sum6+ca+x6==0
#define sum6 0
#define ca 0
#elif sum6+ca+x6==1
#define sum6 1
#define ca 0
#elif sum6+ca+x6==2
#define sum6 0
#define ca 1
#else
#define sum6 1
#define ca 1
#endif
#if sum7+ca+x7==0
#define sum7 0
#define ca 0
#elif sum7+ca+x7==1
#define sum7 1
#define ca 0
#elif sum7+ca+x7==2
#define sum7 0
#define ca 1
#else
#define sum7 1
#define ca 1
#endif
//----------------------
#define ca 0
#if x0+ca+y0==0
#define x0 0
#define ca 0
#elif x0+ca+y0==1
#define x0 1
#define ca 0
#elif x0+ca+y0==2
#define x0 0
#define ca 1
#else
#define x0 1
#define ca 1
#endif
#if x1+ca+y1==0
#define x1 0
#define ca 0
#elif x1+ca+y1==1
#define x1 1
#define ca 0
#elif x1+ca+y1==2
#define x1 0
#define ca 1
#else
#define x1 1
#define ca 1
#endif
#if x2+ca+y2==0
#define x2 0
#define ca 0
#elif x2+ca+y2==1
#define x2 1
#define ca 0
#elif x2+ca+y2==2
#define x2 0
#define ca 1
#else
#define x2 1
#define ca 1
#endif
#if x3+ca+y3==0
#define x3 0
#define ca 0
#elif x3+ca+y3==1
#define x3 1
#define ca 0
#elif x3+ca+y3==2
#define x3 0
#define ca 1
#else
#define x3 1
#define ca 1
#endif
#if x4+ca+y4==0
#define x4 0
#define ca 0
#elif x4+ca+y4==1
#define x4 1
#define ca 0
#elif x4+ca+y4==2
#define x4 0
#define ca 1
#else
#define x4 1
#define ca 1
#endif
#if x5+ca+y5==0
#define x5 0
#define ca 0
#elif x5+ca+y5==1
#define x5 1
#define ca 0
#elif x5+ca+y5==2
#define x5 0
#define ca 1
#else
#define x5 1
#define ca 1
#endif
#if x6+ca+y6==0
#define x6 0
#define ca 0
#elif x6+ca+y6==1
#define x6 1
#define ca 0
#elif x6+ca+y6==2
#define x6 0
#define ca 1
#else
#define x6 1
#define ca 1
#endif
#if x7+ca+y7==0
#define x7 0
#define ca 0
#elif x7+ca+y7==1
#define x7 1
#define ca 0
#elif x7+ca+y7==2
#define x7 0
#define ca 1
#else
#define x7 1
#define ca 1
#endif
#include __FILE__
#endif
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.134.226.149
→ MOONRAKER:真不舒服 05/18 09:48
推 zerodevil:還蠻有趣的啊 05/18 13:34
→ MOONRAKER:可是好多喔 @@ 05/18 13:57
→ MOONRAKER:阿對了 想起來上次看到有人寫的SQL2000 MD5 procedure 05/18 13:57
推 VictorTom:頗惡搞風XD 05/18 13:58
→ MOONRAKER:裡面也是寫到像macro一樣…因為SQL不能操作bit… 05/18 13:58
推 x000032001:看的好暈阿 這真的是C嗎 05/18 14:36
→ loveflames:原理很簡單,#if zzz<=C以後的只是在做進位 05/18 15:37