面试收集—hello,world 也有新花样
今天看一篇博主的文章,提到了添加一行代码输出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 也有新花样相关推荐
- 硅谷的万圣节,看科技公司如何玩出新花样?
专栏 | 九章算法 网址 | www.jiuzhang.com 一年一度的万圣节到了.作为每年赛逼格的重大节日,硅谷各大IT公司门也不甘示弱,玩起各种新花样. 那么,硅谷科技公司的万圣节都是怎么过的呢 ...
- 新农人谋定新理念-农业大健康·李孟:“玩”出农业新花样
新农人谋定新理念-农业大健康·李孟:"玩"出农业新花样 (记者谢锐佳.邹大鹏.王建.何山)新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 万赢信采 ...
- 点击率预估又有新花样?
好久没有写排序模型了,最近又看到一篇令人眼前一亮的论文,Deep User Match Network for Click-Through Rate Prediction.该文提出以往的论文都专注于挖 ...
- 英语总结系列(二十一):英语也能玩出新花样
[前言] 九月份在外工作的一个月,离开了家,自己独自一人在外如何将英语兴趣提上来那?这是摆在我面前的一个绕不过的问题:经过前三个月的适应,工作已经搞定但是英语的激情逐渐平复下去:好在自己及时调整找到一 ...
- 平面设计中的字体设计新花样
创意字体排版既是 2020 年的主要平面设计的趋势,也是一直以来一直在趋势前沿的一个设计门类.对于设计师而言,优秀的创意字体排版一直是热门的设计灵感来源.今天我就分门别类地搜集了一堆具有启发性和创新性 ...
- nvme命令中prp_NVMe又有新花样!CMB vs HMB
原标题:NVMe又有新花样!CMB vs HMB 1 什么是CMB 在NVMe Express 1.2 Spec中开始支持一个特性,那就是CMB(Controller Memory Buffer),是 ...
- win10隐藏任务栏_Win10美化指南 | 定制属于你的专属桌面,Windows也能玩出新花样...
Win10美化指南 | 定制属于你的专属桌面,Windows也能玩出新花样 7SIZE丨插图部分来自于网络 作为一名Windows党,是不是对田牌一尘不变的笨拙枯燥感到无感甚至是厌烦,虽然说不丑,但是 ...
- 下一个5年,营销还能玩出什么新花样?|大咖直播
在这样一个信息爆炸的时代,你是否也有这样的感受:真正能够接收的有效信息实在少之又少,我们总是用碎片化的时间和集中不起来的注意力,走马观花地阅读杂乱的信息. 而对于久经商场的品牌方来说,所有的竞争,其实 ...
- 如何把微信状态玩出新花样?30秒就能学会的超简单教程
大家都知道吗?微信8.0版本开始推出了微信状态功能,大家可以在主页写下此刻的心情.正在做的事还可以配上图片或者视频.在24小时之内你的好友在点开你的主页时就能看到你的状态了. 那微信状态怎么改呢?今天 ...
最新文章
- RxJavaMVPRetrofit
- 对渠道流量异常情况的分析
- linux 内核配置 dns,linux bind dns简单配置
- Arduino笔记-外部中断实验(震动传感器实时亮灯)
- oracle跨数据库用户操作,ORACLE跨数据库操作,DBLINK的使用
- qss qmenu 设置icon位置大小_实战PyQt5: 125-使用配置文件来保存和恢复应用的设置...
- 如何加入github开源项目!
- 解决Ubuntu下VNC客户端无法输入s和m的方法
- 数字货币交易系统_区块链交易所开发,数字货币平台功能与安全
- pom.xml 注释
- Tree命令的下载与使用
- 计算机视觉-OpenCV入门讲解
- CMUX协议学习总结
- shopex4.8.5 php5.6,惊爆漏洞ShopEX4.8.5隐患漏洞,最终解决方法ShopEX4.8.5安装完成后打开显示:Access denied by install.lock...
- wireshark使用
- UNIX时间戳的UTC(协调世界时)
- android 微信分享 源码,记录Android微信分享功能的吐槽与思考
- R语言数据的排序、转换、汇总
- 李佳琦转行成直播一哥,他做对了哪些事?
- TMS320C6678开发笔记---SRIO 启动