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

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

另外说明:

在网下看到有人问_tmain与main的区别,翻译得一塌糊涂,我也顺便翻译一下:

用过C言语的人都知道每一个C的程序都会有一个main函数,但有时看别人写的程序却出现了_tmain,会感动很困惑。我当时也是很困惑,于是上网找资料看。现在将我得到的结果总结一下。因为并没有什么根据,如果有误。欢迎指正:_tmain与main的区别

[@[email protected]]

1。 main是C程序的函数,_tmain是main为了支持unicode所使用的main的別名
2。 _tmain的定义在<tchar.h>可以找到,如#define _tmain main,所以要加#i nclude <tchar.h>才能用。

3。因此_tmain compile后仍为main,所以都可以执行

另外,wmain也是main的另一個别名,是为了支持二个字节的语言环境
-----------------------
int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );
wmain( int argc, wchar_t *argv[ ], wchar_t *envp[ ] )
int _tmain(int argc, _TCHAR* argv[])

用_tmain()代替main()有什么好处?_tmain()是不是可以在程序用命令行启动的时候,决定arcv[]字符是ANSY或者UNICODE?知道的朋友能讲讲吗?
支持UNICODE我知道。具体体现在?我用main()WinMain()函数里使用TCHAR,泛型函数,照样可以支持源代码分别编译ASNY和UNICODE。所以我问_tmain()的区别是不是仅在于程序启动的时候?
是不是用UNICODE不是在程序启动的时候决定的,而是在程序编译的时候看有没有预处理定义"UNICODE",所以_tmain的作用就和使用TCHAR而非具体的char或w_char一样,当编译时定义了UNICODE时,就是wmain当没定义时就是main,
时间: 2024-08-29 21:44:10

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()的区别

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

关于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字符集进行自动转换用的程序入口点函数. 函

void main(), int main() 和int main(void)的区别

1.区别是main()函数是否有返回值.2.void定义的函数没有返回值,int定义的函数返回整型值.3.void,字面意思是"无类型",常用在程序编写中对定义函数的参数类型.返回值.函数中指针类型进行声明,有注释和限制程序的作用. 4.标准的main函数格式为:int main(int argc, char *argv[]);即返回值为整型,带两个参数,argc为命令行参数的个数,argv为指针数组,前argc个指针为参数列表,最后一个指针值为NULL.

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>里,有这么

单例模式之饿汉方式实现与静态内部类实现的区别

饿汉方式实现代码如下: package priv.jack.dp.demo.singleton; /** * @author Jack * 饿汉模式单例 * 线程安全 * 不支持懒加载,容易产生垃圾对象 * 优点:没有加锁,执行效率会提高. */ public class HungrySingleton { private static HungrySingleton INSTANCE = new HungrySingleton() ; private HungrySingleton() { S

关于int main(int argc,char* argv[])详解

平时在VS的环境下,主函数总会看到这两个参数,今天突然很想知道这两个参数的原理以及作用,因此查了下资料.真心受教了. 下面的博文是在百度空间看一位大神的,原文链接:http://hi.baidu.com/sgglong70626/item/8881322b2dce21c1ee10f11e argc是命令行总的参数个数   argv[]为保存命令行参数的字符串指针,其中第0个参数是程序的全名,以后的参数为命令行后面跟的用户输入的参数,argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数

类的声明 , 类和结构体的区别 , 内联函数

#include<iostream> using namespace std; class A;//类的声明 class B { private: A *a;//必须是指针 ,不能为 A a; }; class  A { private: B b; }; int main() {} 类和结构体区别: 结构体默认public 类默认是private 在继承方式:结构体默认公有继承 类默认私有继承 inline 调用内联函数并没有执行函数的调用过程,只是把函数的代码嵌入到了程序的调用点 , 减少了