博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于main()函数的小技巧
阅读量:6907 次
发布时间:2019-06-27

本文共 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://mngdl.baihongyu.com/

你可能感兴趣的文章
不要在界面上对数据库进行改动
查看>>
[windows]快速从ftp下载最新软件包的批处理脚本
查看>>
Linux 信号signal处理函数
查看>>
c++ 多线程写日志的一个很实用的日志类源码(支持 c++ builder)
查看>>
推荐系统设计
查看>>
Nginx https证书部署
查看>>
java的NIO和AIO
查看>>
Struts.xml中Action的method与路径的三种匹配方法
查看>>
LoadRunner参数化取值与连接数据库
查看>>
hdu 1247 Hat’s Words(字典树)
查看>>
Vshpere client登录VC报错
查看>>
新手学习oracle之迁移数据表空间
查看>>
Hive SQL 监控系统 - Hive Falcon
查看>>
perl安装和安装模块
查看>>
MySQL5.7.16 gtid复制
查看>>
书稿前言
查看>>
java-第十四章-代参的方法(二)-查找会员积分
查看>>
php 之redis
查看>>
IBM推出新平台 用开放架构争夺混合云客户
查看>>
eclipse下提交job时报错mapred.JobClient: No job jar file set. User classes may not be found.
查看>>