博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
据说是月薪2W的笔试题
阅读量:7143 次
发布时间:2019-06-29

本文共 910 字,大约阅读时间需要 3 分钟。

话说,有这样一道据说是月薪2W的笔试题:

#include "stdio.h"

void print()
{
*
}
void main()
{
}

        要求在*部分写代码使整个程序运行后输出“hello world”,有些人说,这还不简单啊,于是写出这样的代码:

01.
#include "stdio.h"
02.
void print()
03.
{
04.
    printf("hello world");
05.
}
06.
void main()
07.
{
08.
    print();
09.
}

        这样写的确是没问题,但是违背了题目的要求,因为题目不允许修改main函数,这下仿佛我们就没辙了,因为我们学习C/C++语言的时候,明确说明main函数是程序的主函数,也是程序的入口函数,可是现在主函数为空,那怎么会执行子函数呢?

        其实这个笔试题考察的不是我们对基本知识的理解,而是要学会发现问题解决问题的能力,有时候,当一条路走不通的时候,我们就要换一条路,通过查找资料,我们发现其实C++是可以修改入口函数的。

        这里需要一个C++预编译标识符 #pragma comment()   来帮助我们搞定这个问题。他的使用类型是:pragma comment( comment-type ,["commentstring"] )。

        comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,exestr,lib,linker之一。

        commentstring是一个提供为comment-type提供附加信息的字符串。

        这里我们需要使用linker来修改链接设置:

#pragma comment(linker, "/entry:print")

        看到了么?通过/entry参数来设置程序链接时候的主函数为print,这样,就相当于print函数是整个程序的主函数,他替换了main函数的作用,相反的,main函数则成为了一个子函数

        完整的代码和运行结果如图所示:

        至于#pragma comment(lib, "msvcrt.lib")是因为使用了puts函数,如果使用printf的话可以不要这一句

 

转载地址:http://yjgrl.baihongyu.com/

你可能感兴趣的文章
关于Linux内核学习(经典)
查看>>
简单理解java中timer的schedule和scheduleAtFixedRate方法的区别
查看>>
滤波电容的选择
查看>>
Selenium2+python自动化5-操作浏览器基本方法
查看>>
洛谷——P1012拼数字符串操作(拼接排序)
查看>>
LeetCode OJ:Maximum Depth of Binary Tree(二叉树最大深度)
查看>>
此实现不是Windows平台FIPS验证的加密算法的一部分
查看>>
Codeforces Round #306 (Div. 2) 550A Two Substrings
查看>>
UDP_TCP示意图
查看>>
解决Could not load file or assembly CefSharp.Core.dll的问题
查看>>
mvc jquery 修改 viewbag
查看>>
容器的使用(四)
查看>>
[Js]碰撞运动
查看>>
5分钟学会红黑树的删除(Deletion on red black tree)
查看>>
一个简单的基于用户的推荐系统+缓存机制
查看>>
(一)欧拉积分
查看>>
HDU-1300(基础方程DP-遍历之前所有状态)
查看>>
自动化测试框架搭建3-TestNG
查看>>
CSS中需要熟练记住的选择器
查看>>
Web Worker
查看>>