转自:http://coolshell.cn/articles/3445.html
C/C++语言,不允许使用Loop和Condition (一行行输入也不可以), 写一个程序打印出1~1000.
方法有很多,我选了俩个人觉得比较有意思的。
一、Power of Objects
#include <cstdio>
int cnt;
class Num { public: Num() { printf("%d/n", ++cnt); } };
int main() { Num num[1000]; return 0;}
通过定义1000个变量,来达到Loop 1000次的效果
二、真正符合要求的Solution (gcc v3.4.2)
#include <stdio.h>
#include <stdlib.h>
void main(int j) {
printf("%d/n", j);
(main + (exit-main)*(j/1000))(j+1);
}
几乎每一个想出来的方法,本质都是通过取巧的手段来实现Loop 1000次。到目前为止,我看过20多种看起来work的方法,但我认为,严格来说,只有上面的第二种真正满足要求(暴力的不算)。如果把程序编译成汇编,你就会发现唯有二并未用到条件跳转。
我最先是在coolshell上看到这具代码的,上面并没有解释。这里解释一下:int j 在这里被认为是argc。没有参数运行时,j=1。接下来,当j<1000时,j/1000为0,所以会产生一个调用;当j=1000时,函数指针变成了exit, 这时调用的是exit(1001)将返回。
二的汇编代码 (点击大图)