今年情人节有一段表达爱情的代码在网上传火了,并且引起了许多的讨论,
for (int i=0; i<forever; i++);
printf("I Love You");
看起来似乎是某位程序员要表达自己的爱慕之情,但是第一行末尾多了一个分号,从而使得后面的printf语句永远不能得到执行;
于是有人解读说,分号是故意加的,表示“爱你在心口难开”;好吧,我们没法联系到原作者,不能否定这个说法是否作者本意;
我们还是按照常规理解对这个代码进行解读,实际上是否故意加了这个分号,并不影响我们的解决。
这个代码显然是不能运行的,因为forever这个变量(或者宏)并没有定义,也没有初始化,编译就会出错,代码根本无法执行。
简单的想法是把forever初始化成一个比较大的数值,比如 int forever=INT_MAX ; 但即便这样,这个代码也还是有问题的,
因为INT_MAX虽然很大,终归经过”漫长“的运行之后,还是会达到的,for循环就退出了,并不能无限次的执行;
或许合理的方式是按照下面这样写:
int forever=INT_MAX;
for (int i=0; i<=forever; i++)
printf("I Love You\n");
首先是把 i<forever 改成了 i<=forever ,因为整数永远不可能大于INT_MAX,当达到和INT_MAX相等的时候,再加1就溢出了,会变成负数,
所以循环就可以无限次的执行了;另外一个修改是printf的输出信息增加了一个换行,否则输出变成I Love YouI Love YouI... 就很抓狂了。
更合理的实现方式,实际上forever完全是多于的,如果要表达无限次的循环,简单的写成 for (;;) 或者 while (true) 不是更好么?