[原創]另類調用 printf 完成任務的方法
昨天逛csdn/c版,看到如下一道題:函數原形已經給出:int p(int i, int N);
功能:調用該函數,打印如下格式的輸出,例p(1, 7);
1
2
3
4
5
6
7
6
5
4
3
2
1
即每行一個數字。(注意:N隻打印一次)
要求:
1. 函數中唯一能夠調用的函數就是printf。
2. 不準使用如下的關鍵字:typedef, enum, do, while, for, switch, case, break, continue, goto, if。
3. 不能使用逗號表達式和?:表達式。
4. 函數中隻能有一條語句。
很快有人給出了答案,果不出所料,用的是遞歸。但貌似不符合題目要求1。難道...
斷了遞歸這條路之後,貌似隻有用偶得老本行啦:
int p(int i,int N)
{
__asm__ __volatile__("movl %%esp,%%ebx;0:cmp $0,%0;jz 1f;pushl %%esi;"
"pushl %%edi;call _printf;incl %%esi;decl %0;jmp 0b;"
"1:cmp $0,%1;jz 2f;pushl %2;pushl %%edi;call _printf;"
"decl %1;decl %2;jmp 1b;2:movl %%ebx,%%esp"
::"m"(N-i+1),"m"(N-i),"m"(N-1),"S"(i),"D"("%d/n"));
}
(編譯環境 gcc v3.3.1)
over!
最後更新:2017-04-02 00:06:29