用过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程序的函数,_tmainmain为了支持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

最新文章

  1. SSH实战 &#183; AJAX异步校验
  2. php 月初,月末时间大统计
  3. [logstash-input-redis]插件使用详解
  4. Unity相关路径
  5. 为什么在Mac中无法用k web运行ASP.NET 5程序
  6. corefile的设置与使用
  7. MySQL Spatial Extensions 地理信息
  8. IOS UIActivityIndicatorView 等待指示器
  9. 最简单的计算MD5方法
  10. REDIS 源码
  11. Python修饰器
  12. (转)Android创建桌面快捷方式两种方法
  13. VC调试笔记
  14. [Hapi.js] Managing State with Cookies
  15. samba服务器的安装及配置
  16. android使用xfire webservice框架远程对sqlserver操作(包括增删改查)的实例!!已在真机上试验通过
  17. POJ 3415 Max Sum of Max-K-sub-sequence (线段树+dp思想)
  18. 了解HTML5和“她”的 API (一)
  19. modelsim+win环境下systemverilog调用c函数
  20. Head First设计模式之桥接模式

热门文章

  1. [置顶] ubuntu server sudo出现sudo:must be setuid root 完美解决办法。
  2. Android学习笔记(三)之带有侧边索引的快速查找(跟带字母索引查找的通讯录差不多)
  3. crtmpserver 在VS2010下的build
  4. linux /proc/pid进程信息说明
  5. windows下用Xshell远程登录Linux
  6. Computer Vision Tutorials from Conferences (2) -- ECCV
  7. 深入理解Apache Flink核心技术
  8. matlab在图像中画长方形(框)
  9. 使用 Kafka 和 Spark Streaming 构建实时数据处理系统(转)
  10. Python爬虫(3)豆瓣登录