关于Main()函数的小技巧

话说,有这样一道笔试题:

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的话可以不要这一句

1 #include "stdio.h"
 2 void print()
 3 {
 4   #pragma comment(linker, "/entry: print")
 5   puts("hello world\n");
 6 }
 7 
 8 void main()
 9 {
10 }

//引用于:http://www.cnblogs.com/lzjsky/archive/2011/09/22/2184889.html
原文链接: https://www.cnblogs.com/linhoo/archive/2013/01/08/2851515.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/74923

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午4:38
下一篇 2023年2月9日 下午4:38

相关推荐