main()和_tmain()的区别

  _tmain()的头文件是<stdafx.h>,是为了支持unicode所使用的main一个别名,是微软操作系统(windows)提供的对unicode字符集和ANSI字符集进行自动转换用的程序入口点函数。在<stdafx.h>中包含的<tchar.h>中定义,经过预编译后_tmain变成main。main()是标准C++的函数入口。标准C++的程序入口点函数,默认字符编码格式ANSI。

  main()函数签名为:

    int main();

    int main(int argc, char* argv[]);

  _tmain()函数签名为:

    int _tmain(int argc, TCHAR *argv[]);

若工程当前的字符集为unicode时,int _tmain(int argc, TCHAR *argv[])会被翻译成  int wmain(int argc, wchar_t *argv[])

若工程当前的字符集为ANSI时,int _tmain(int argc, TCHAR *argv[])会被翻译成  int main(int argc, char *argv[])

一、区别

1. Main是所有c或c++的程序执行的起点,_tmain是main为了支持unicode所使用的main的别名 ._tmain()不过是unicode版本的的main() .

2. _tmain需要一个返回值,而main默认为0(int).

3. _tmain的定义在<tchar.h>可以找到,如#define _tmain main,所以要加

  #include <tchar.h>才能用。_tmain()是个宏,如果是UNICODE则他是wmain()否则他是main().

4. _tmain这个符号多见于VC++创建的控制台工程中,这个是为了保证移植unicode而加入的(一般_t、_T、T()这些东西都是宏都和unicode有关系),对于使用非unicode字符集的工程来说,实际上和main没有差别(其实就算是使用unicode字符集也未必有多大的差别)。

5. 因此_tmain compile后仍为main,所以都可以执行.

  main(),wmain是WINDOWS的控制台程序(32BIT)或DOS程序(16BIT).

  WinMain(),wWinMain()是WINDOWS的GUI程序.

另外,wmain也是main的另一个别名,是为了支持二个字节的语言环境。

原文地址:https://www.cnblogs.com/Sheenagh/p/12215696.html

时间: 2024-08-01 16:44:51

main()和_tmain()的区别的相关文章

vs中 main和_tmain的区别

用过C的人都知道每一个C的程序都会有一个main(),但有时看别人写的程序发现主函数不是int main(),而是int _tmain(),而且头文件也不是<iostream.h>而是<stdafx.h>,会困惑吧? 一起来看看他们有什么关系吧 首先,这个_tmain()是为了支持unicode所使用的main一个别名而已,既然是别名,应该有宏定义过的,在哪里定义的呢?就在那个让你困惑的<stdafx.h>里,有这么两行 #include <stdio.h>

main()和_tmain()有什么区别

用过C的人都知道每一个C的程序都会有一个main(),但有时看别人写的程序发现主函数不是int main(),而是int _tmain(),而且头文件也不是<iostream.h>而是<stdafx.h>,会困惑吧?一起来看看他们有什么关系吧首先,这个_tmain()是为了支持unicode所使用的main一个别名而已,既然是别名,应该有宏定义过的,在哪里定义的呢?就在那个让你困惑的<stdafx.h>里,有这么两行#include <stdio.h>#in

关于main()和_tmain()

1.两者的共同点 int _tmain(int argc, _TCHAR* argv[])    和  int main(int argc, char* argv[])  ,两者都是程序的主函数,两者都是程序的入口. 2.两者的不同点 main()是标准C++的函数入口,默认字符编码格式ANSI 函数名为: int main(); int main(int argc, char* argv[]); _tmain()是提供的对unicode字符集和ANSI字符集进行自动转换用的程序入口点函数. 函

[android]清单文件中MAIN与LAUNCHER的区别

MAIN 和 LAUNCHER,之前一直不注意这两个有区别,写程序的时候都放到一个filter中,前两天面试问到了,总结一下: MAIN指定了程序入口地址. LAUNCHER是程序在手机桌面上的图标. 如果只设置了MAIN,没有设置LAUNCHER,则程序可以被安装到手机,但是在桌面看不到APP的图标,所以也就无法启动APP. 如果只设置了LAUNCHER,没有设置MAIN,则程序不知道从哪个Activity启动,所以也就不会在桌面显示图标. 如果给多个Activity设置了MAIN和LAUNC

wmain 、_tmain()和main()区别

_tmain()是unicode版本的的main() _tmain这个符号多见于VC++创建的控制台工程中,这个是为了保证移植unicode而加入的(一般_t._T.T()这些东西都和unicode有关系),对于使用非unicode字符集的工程来说,实际上和main没有差别(其实就算是使用unicode字符集也未必有多大的差别). 1. main是C程序的函数,_tmain是main为了支持unicode所使用的main的别名2. _tmain的定义在<tchar.h>可以找到,如#defin

int main() 与 int _tmain()

用过C的人都知道每一个C的程序都会有一个main(),但有时看别人写的程序发现主函数不是int main(),而是int _tmain(),而且头文件也不是<iostream.h>而是<stdafx.h>,会困惑吧? 一起来看看他们有什么关系吧(_tmain()是unicode版本的main()) 首先,这个_tmain()是为了支持unicode所使用的main一个别名而已,既然是别名,应该有宏定义过的,在哪里定义的呢?就在那个让你困惑的<stdafx.h>里,有这么

c语言define和typedef区别和使用

define完全可以理解替换,typedef代表别名.听着差不多的意思,那2者区别在哪? 先来个简单例子查看基本使用. //define和typedef区别 #define DB double //替换 define 被替换的内容 替换的内容 typedef double db; //别名 typedef 原来的类型名 新的别名 //typedef需要分号 ,typeof 去掉以后符合语法规则,define去掉就会报错 void main() { //看不出区别 DB d1 = 1.2,d2=1

程序猿之---C语言细节21(#define和typedef区别、结构体细节)

主要内容:#define和typedef区别.结构体细节 #include <stdio.h> #define INT_D int* #define CHAR_D char int main() { /*#define 与 typedef区别*/ typedef int* INT_T; typedef char CHAR_T; INT_T a,b; // a.b都为int型指针 INT_D c,d; // c为int型指针.d为int整型 unsigned CHAR_D e; // #defi

32 bit 与 64 bit 程序(2)比较

32 bit  与 64 bit 程序(2)区别 由于操作系统内存分配的不同,导致软件开发过程中,需要编译不同版本的软件. 几个重要概念:  (1)这里所说的的32位与64位程序,是指经过编译器编译后的可执行文件,例如像Windows上的exe文件,而最初编写的源码并没有32位和64位之说. (2)不是所有的程序需要区分32位和64位,对于原生语言例如C语言编写的程序需要区分64位与32位,但是对于像Java这样的语言,就不需要这样了,因为Java编写的程序是在JVM(Java虚拟机)上运行的,