今天看一篇博主的文章,提到了添加一行代码输出hello world的有趣题目,于是在网上搜,发现关于hello world的小伎俩还真不少,当然,问题的关键不在hello world上,而在这背后的原理之中。那么我们就来看一看这些小题目吧!


题目一:如下,在print()函数中填充代码,使之显示hello ,world,要求main() 不作改动

/* c/c++ code */
#include "stdio.h"
void print()
{
    
}
void main()
{
}

显然,这有两种思路来结局,因为main函数中没有任何执行代码,所以解决方案一种是在main()函数本身打主意,一种是看看能不能在main()函数执行之前就解决问题。

请看第一种解决方案(思路一):

#include <stdio.h>
#include <stdio.h>
void print()
{
#define main main(){ printf("hello,world");}\
void ccav
}
void main ()
{
}

这个解法非常巧妙,但是运用的思维却非常简单,宏定义可以定义在任何地方,在编译阶段宏定义就已经完全展开,也就说,编译完成之后,程序实际上就变成了这幅摸样:

#include <stdio.h>
void print()
{
}
void main ()
{
   printf("hello,world");
}
void ccav()
{
}

解法二(思路二)思路是这样的,抢在main函数执行之前先做点什么,代码如下:

#include "stdio.h"
void print()
{

  #pragma comment(linker, "/entry:print1")
  printf("hello world\n");
}
int main()
{
}

这个思路很巧妙,破除了思维定势,人们的第一印象一般是如果main函数都进不去,怎么执行,但是却忘了程序入口点是可以改的,但是需要说明的是这个依赖于具体的编译器,像我用的gcc就不行,但是在vs2008中是可以的,另外,需要说明的是(与本题无关,纯属闲话),main 函数返回值如果是void ,在g++中编译都过不了,具体分析请看 这篇博客 。

解法三如下,虽然我不推荐,而且也是依赖于具体的编译器,调试环境,而且这个解法有点取巧的嫌疑,但是也可以作为一个思想

#include "stdio.h"
void print()
{
}
    int tmp = printf("hello world\n");
//}
void main()
{
}

这个思路的原理是全局变量的初始化是在main函数执行之前。


题目二:一个C语言的填空题目,Helloworld

int main(){
    if(/*在此填入一个语句*/) printf("Hello");
    else printf(" World!");
}

输出 Hello World!

解法:

#include "unistd.h"
#include "stdio.h"
int main(){
        if ( !fork() || (!wait()) ) //子进程打印hello,父进程等待子进程结束
                printf("hello");
        else
                printf("world!");//子进程结束后,父进程打印world!
}

说明:fork有一个特点,就是同一个函数有至少两个返回值,在父进程中返回非零的数,在子进程中返回0,因此呢,在上面的代码中,如果进入的是子进程,那么!fork()为1,wait()不用执行,输出hello,而如果是父进程,!fork()为0,需要接着检查,要等一会,确保了先输出hello,在输出world,需要支持的是,fork()和wait()是linux系统调用,这个程序在windows os上是跑不通的,即便是在minGW这种windows下的gcc编译器中也不行。

转载于:https://www.cnblogs.com/obama/archive/2013/04/26/3044851.html

面试收集—hello,world 也有新花样相关推荐

  1. 硅谷的万圣节,看科技公司如何玩出新花样?

    专栏 | 九章算法 网址 | www.jiuzhang.com 一年一度的万圣节到了.作为每年赛逼格的重大节日,硅谷各大IT公司门也不甘示弱,玩起各种新花样. 那么,硅谷科技公司的万圣节都是怎么过的呢 ...

  2. 新农人谋定新理念-农业大健康·李孟:“玩”出农业新花样

    新农人谋定新理念-农业大健康·李孟:"玩"出农业新花样 (记者谢锐佳.邹大鹏.王建.何山)新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 万赢信采 ...

  3. 点击率预估又有新花样?

    好久没有写排序模型了,最近又看到一篇令人眼前一亮的论文,Deep User Match Network for Click-Through Rate Prediction.该文提出以往的论文都专注于挖 ...

  4. 英语总结系列(二十一):英语也能玩出新花样

    [前言] 九月份在外工作的一个月,离开了家,自己独自一人在外如何将英语兴趣提上来那?这是摆在我面前的一个绕不过的问题:经过前三个月的适应,工作已经搞定但是英语的激情逐渐平复下去:好在自己及时调整找到一 ...

  5. 平面设计中的字体设计新花样

    创意字体排版既是 2020 年的主要平面设计的趋势,也是一直以来一直在趋势前沿的一个设计门类.对于设计师而言,优秀的创意字体排版一直是热门的设计灵感来源.今天我就分门别类地搜集了一堆具有启发性和创新性 ...

  6. nvme命令中prp_NVMe又有新花样!CMB vs HMB

    原标题:NVMe又有新花样!CMB vs HMB 1 什么是CMB 在NVMe Express 1.2 Spec中开始支持一个特性,那就是CMB(Controller Memory Buffer),是 ...

  7. win10隐藏任务栏_Win10美化指南 | 定制属于你的专属桌面,Windows也能玩出新花样...

    Win10美化指南 | 定制属于你的专属桌面,Windows也能玩出新花样 7SIZE丨插图部分来自于网络 作为一名Windows党,是不是对田牌一尘不变的笨拙枯燥感到无感甚至是厌烦,虽然说不丑,但是 ...

  8. 下一个5年,营销还能玩出什么新花样?|大咖直播

    在这样一个信息爆炸的时代,你是否也有这样的感受:真正能够接收的有效信息实在少之又少,我们总是用碎片化的时间和集中不起来的注意力,走马观花地阅读杂乱的信息. 而对于久经商场的品牌方来说,所有的竞争,其实 ...

  9. 如何把微信状态玩出新花样?30秒就能学会的超简单教程

    大家都知道吗?微信8.0版本开始推出了微信状态功能,大家可以在主页写下此刻的心情.正在做的事还可以配上图片或者视频.在24小时之内你的好友在点开你的主页时就能看到你的状态了. 那微信状态怎么改呢?今天 ...

最新文章

  1. RxJavaMVPRetrofit
  2. 对渠道流量异常情况的分析
  3. linux 内核配置 dns,linux bind dns简单配置
  4. Arduino笔记-外部中断实验(震动传感器实时亮灯)
  5. oracle跨数据库用户操作,ORACLE跨数据库操作,DBLINK的使用
  6. qss qmenu 设置icon位置大小_实战PyQt5: 125-使用配置文件来保存和恢复应用的设置...
  7. 如何加入github开源项目!
  8. 解决Ubuntu下VNC客户端无法输入s和m的方法
  9. 数字货币交易系统_区块链交易所开发,数字货币平台功能与安全
  10. pom.xml 注释
  11. Tree命令的下载与使用
  12. 计算机视觉-OpenCV入门讲解
  13. CMUX协议学习总结
  14. shopex4.8.5 php5.6,惊爆漏洞ShopEX4.8.5隐患漏洞,最终解决方法ShopEX4.8.5安装完成后打开显示:Access denied by install.lock...
  15. wireshark使用
  16. UNIX时间戳的UTC(协调世界时)
  17. android 微信分享 源码,记录Android微信分享功能的吐槽与思考
  18. R语言数据的排序、转换、汇总
  19. 李佳琦转行成直播一哥,他做对了哪些事?
  20. TMS320C6678开发笔记---SRIO 启动

热门文章

  1. 配置中心、消息队列、分布式服务链路跟踪
  2. Go编程模式--流水线模式
  3. Java本地缓存CaffeineCache集成
  4. Eureka常用配置
  5. Nginx应用场景之HTTP服务器
  6. pandas切片操作
  7. 2019年创业融资去哪个平台好?创成汇
  8. python之字符编码(四)
  9. DPM灾难切换应用场景
  10. 利用win7系统自身修复还原功能