int main() 与 int _tmain()
用过C的人都知道每一个C的程序都会有一个main(),但有时看别人写的程序发现主函数不是int main(),而是int _tmain(),而且头文件也不是<iostream.h>而是<stdafx.h>,会困惑吧? 一起来看看他们有什么关系吧(_tmain()是unicode版本的main()) 首先,这个_tmain()是为了支持unicode所使用的main一个别名而已,既然是别名,应该有宏定义过的,在哪里定义的呢?就在那个让你困惑的<stdafx.h>里,有这么两行 #include <stdio.h>
#include <tchar.h> 我们可以在头文件<tchar.h>里找到_tmain的宏定义 #define _tmain main 所以,经过预编译以后, _tmain就变成main了。 =======================================================================
_tmain这个符号多见于VC++创建的控制台工程中,这个是为了保证移植unicode而加入的(一般_t、_T、T()这些东西都和unicode有关系),对于使用非unicode字符集的工程来说,实际上和main没有差别(其实就算是使用unicode字符集也未必有多大的差别)。
1: main是C程序的函数,_tmain是main为了支持unicode所使用的main的别名
2: _tmain的定义在<tchar.h>可以找到,如#define _tmain main,所以要加#i nclude <tchar.h>才能用。
3:因此_tmain compile后仍为main,所以都可以执行
另外,wmain也是main的另一个别名,是为了支持二个字节的语言环境
1) main是c/c++的标准入口函数名
2) winmain是windows api窗体程序的入口函数(int winapi winmain()中winapi是__stdcall的宏 在windows.h中定义)
3) _tmain _twinmain是unicode版本函数别名 为了编译时能自动转换字符串编码
**********************************************************************************
1.main是C程序的函数,_tmain是main为了支持unicode所使用的main的別名
2._tmain的定义在<tchar.h>可以找到,如#define _tmain main,所以要加#include <tchar.h>才能用。 _tmain()是个宏,如果是UNICODE则他是wmain()否则他是main()
3.因此_tmain compile后仍为main,所以都可以执行
**********************************************************************************
1) main()是WINDOWS的控制台程序(32BIT)或DOS程序(16BIT),
2) WinMain()是WINDOWS的GUI程序, wmain()是UNICODE版本的main(),
3)_tmain()是个宏,如果是UNICODE则他是wmain()否则他是main() 外,wmain也是main的另一個别名,是为了支持二个字节的语言环境
====================================================================================
结论:
1:默认情况下,如果两个方法都在,那么执行main。
2:如果未设置Unicode字符集,那么两个方法都存在的话,会报错:
main已有主体,那么tmain存在就没有了意义。
3:任何情况下,这两个方法任意存在一个都行,都可以作为入口执行。
4:如果有一个main方法,但是没有内容,那将会执行_tmain。
参考: https://zhidao.baidu.com/question/318393902.html
http://blog.csdn.net/ctg168/article/details/46412113
http://www.cnblogs.com/lucyjiayou/archive/2011/05/07/2039621.html
最新文章
- SSH实战 &#183; AJAX异步校验
- php 月初,月末时间大统计
- [logstash-input-redis]插件使用详解
- Unity相关路径
- 为什么在Mac中无法用k web运行ASP.NET 5程序
- corefile的设置与使用
- MySQL Spatial Extensions 地理信息
- IOS UIActivityIndicatorView 等待指示器
- 最简单的计算MD5方法
- REDIS 源码
- Python修饰器
- (转)Android创建桌面快捷方式两种方法
- VC调试笔记
- [Hapi.js] Managing State with Cookies
- samba服务器的安装及配置
- android使用xfire webservice框架远程对sqlserver操作(包括增删改查)的实例!!已在真机上试验通过
- POJ 3415 Max Sum of Max-K-sub-sequence (线段树+dp思想)
- 了解HTML5和“她”的 API (一)
- modelsim+win环境下systemverilog调用c函数
- Head First设计模式之桥接模式
热门文章
- [置顶] ubuntu server sudo出现sudo:must be setuid root 完美解决办法。
- Android学习笔记(三)之带有侧边索引的快速查找(跟带字母索引查找的通讯录差不多)
- crtmpserver 在VS2010下的build
- linux /proc/pid进程信息说明
- windows下用Xshell远程登录Linux
- Computer Vision Tutorials from Conferences (2) -- ECCV
- 深入理解Apache Flink核心技术
- matlab在图像中画长方形(框)
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统(转)
- Python爬虫(3)豆瓣登录