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程序的函数,_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
时间: 2024-08-11 01:20:32

int main() 与 int _tmain()的相关文章

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.

关于 void main 和 int main

main 函数的返回值大家注意了吗?也许有人会说可以没有返回值,如果你深入到程序的 CRT启动代码,你会发现.... 1 __initenv = envp; 2 mainret = main(argc, argv, envp); 3 if ( !managedapp ) 4 exit(mainret); 5 if (has_cctor == 0) 6 cexit(); 按照新的 C99 标准,即使函数本身没有定义返回值,编译器也会加上,以返回给激发程序运行状态.很多人甚至市面上的一些书籍,都使用

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

int main()括号里面为空代表不确定参数,并不是说不带参数.如果要告诉编译器函数不带参数,做法是:int main(void)int main()需要返回一个整形值,也就是我们经常会看到在这个函数末尾会加上return 0 void main()代表这个函数不需要返回任何值,比如:void printStar(){printf("**********\n");}

int main (int argc, const char * argv[0]) 中参数的含义;指针数组和数组指针

恩,有的编译器初始化时候会产生这样的参数 argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名 1. 几种C++ 常见的参数种类 int main(void); int main(); int main(int argc, char **argv);   //等价于int main(int argc, char *argv[]),是否等价呢?是不是前一个可以表示任意长度的任意个数组,后一个只是定长的任意个数的数组?见下面 int main(int argc, c

int main()还是void main()

按照新的C99标准,即使函数本身没有定义返回值,编译器也会加上,以返回给激发程序,运行状态.很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的.C/C++ 中从来没有定义过void main( ) .C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... * / } is not and never has been C++, nor has it even be

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

通常我们见到的main函数都是不带参数的,实际上,main函数也可以带参数.main函数的参数是由谁传来的呢?答案是操作系统,C++规定main函数的参数只能有两个,即argc和argv,带参main函数的形式如下所示. int main(int argc,char*argv[]) { …… } 第一个参数argc必须是整型变量,称做参数计数器,其值是包括命令名在内的参数个数: 第二个参数argv必须是指向字符指针数组,存放命令名和参数字符串的地址. 要调用带参主函数必须在操作系统环境下进行,参

int *const &amp;&amp; int const * &amp;&amp; const int *的区别

ANSIC允许声明常量,常量和变量不同,常量就是不可以改变的量,用关键字const来修饰 比如:const int a int const a 以上两种声明方式是一样的,我们不需要考虑const和int的先后顺序,按照你理解的方便的一中方式进行应用. 因为const和int的顺序先后并不影响结果,因此 int const *   &&  const int *这两中情况就是一样的 所以我们只需要讨论两种情况 -----------------------------------------

喜闻乐见的const int *p、int* const p、const int* const p

不废话直接代码示例: 1 void f(const int *p) { 2 3 int b = 10; 4 5 *p = 10; // error 6 7 p = &b; // fine 8 9 } 10 11 void f(int* const p) { 12 13 int b = 10; 14 15 *p = 10; // fine 16 17 p = &b; // error 18 19 } 20 21 void f(const int* const p) { 22 23 int b

int main(int argc, char * argv[]) 里的异常处理

#import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { @try { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } @catch (NSException *exception) { NSLog(@&qu