Re: [問題] 能不能用macro做到這件事

看板C_and_CPP作者 (咕啾咕啾魔法陣)時間15年前 (2010/05/18 04:01), 編輯推噓3(305)
留言8則, 5人參與, 最新討論串3/3 (看更多)
※ 引述《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

05/18 09:48, , 1F
真不舒服
05/18 09:48, 1F

05/18 13:34, , 2F
還蠻有趣的啊
05/18 13:34, 2F

05/18 13:57, , 3F
可是好多喔 @@
05/18 13:57, 3F

05/18 13:57, , 4F
阿對了 想起來上次看到有人寫的SQL2000 MD5 procedure
05/18 13:57, 4F

05/18 13:58, , 5F
頗惡搞風XD
05/18 13:58, 5F

05/18 13:58, , 6F
裡面也是寫到像macro一樣…因為SQL不能操作bit…
05/18 13:58, 6F

05/18 14:36, , 7F
看的好暈阿 這真的是C嗎
05/18 14:36, 7F

05/18 15:37, , 8F
原理很簡單,#if zzz<=C以後的只是在做進位
05/18 15:37, 8F
文章代碼(AID): #1ByQ2E_Q (C_and_CPP)
文章代碼(AID): #1ByQ2E_Q (C_and_CPP)