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
int main() 与 int _tmain()的更多相关文章
- void main(), int main() 和int main(void)的区别
1.区别是main()函数是否有返回值.2.void定义的函数没有返回值,int定义的函数返回整型值.3.void,字面意思是"无类型",常用在程序编写中对定义函数的参数类型.返回 ...
- int main()还是void main()
按照新的C99标准,即使函数本身没有定义返回值,编译器也会加上,以返回给激发程序,运行状态.很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的.C/C++ 中从来没有定义过 ...
- 浅谈main(),int main(),void main(),int main(void)四者之间的区别
1,main():相当于 int main() 2,int main():int 是main() 函数的返回类型.这表明main()函数返回的值是整数且授受任何数量的参数. 3,void main() ...
- int main (int argc, const char * argv[0]) 中参数的含义;指针数组和数组指针
恩,有的编译器初始化时候会产生这样的参数 argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名 1. 几种C++ 常见的参数种类 int main(void); in ...
- int *const && int const * && const int *的区别
ANSIC允许声明常量,常量和变量不同,常量就是不可以改变的量,用关键字const来修饰 比如:const int a int const a 以上两种声明方式是一样的,我们不需要考虑const和in ...
- const int * p 和 int const * p 和 int * const p 的区别
首先注意,const int * p 和int const *p 是一样的,并且不管是不是*p,即使const int i和int const i也是一样的,所以我们接下来只讨论int const * ...
- void main() && int main()
C/C++ 中从来没有定义过void main( ) .C++ 之父说过: The definition void main( ) { /* ... * / } is not and never ha ...
- int main( int argc, char **argv)
1.参数 (有时参数是void) argc是程序运行时参数个数 argv是存储参数的数组,可以用char* argv[],也可以用char **argv. 例如编译一个hello.c的程序 1 #in ...
- int main(int argc,char* argv[])详解
argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数, 比如: int main(int argc, ...
随机推荐
- [js插件]JqueryUI日期插件
引言 之前使用jqueryUi中的弹出框做了一个可拖拽的弹出登录框,也顺便将里面的常用的日期插件和文本框智能提示插件,也学习了一下. 使用方法 首先在项目中引入以下文件: <!-- 日期插件 默 ...
- Activex 数字签名
本次使用makecert的命令如下: makecert -sv online.pvk -n "CN=中国在线" -ss My -r -b 01/01/1900 -e 01/01/9 ...
- 【GISER&&Painter】Chapter02:WebGL中的模型视图变换
上一节我们提到了如何在一张画布上画一个简单几何图形,通过创建画布,获取WebGLRendering上下文,创建一个简单的着色器,然后将一些顶点数据绑定到gl的Buffer中,最后通过绑定buffer数 ...
- 黑马day16 jquery入门
jquery: 1.jQuery 对象就是通过jQuery包装DOM对象后产生的对象. jQuery对象是jQuery独有的.假设一个对象是jQuery对象,那么它就能够使用jQuery里的方法:$( ...
- JavaScript 函数大全
javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数 1.常规函数 javascript常规函数包括以下9个函数: (1)alert函数:显示一个警告 ...
- 在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么?
在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么? 例如: //! [0] GLWidget :: GLWidget(Helper * helper,QWidget * pare ...
- dedecms织梦 标签远程文件写入漏洞
测试方法: @Sebug.net dis本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! 前题条件,必须准备好自己的dede数据库,然后插入数据: insert into d ...
- windows下读取Linux分区软件
导读 ext3等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.etx4也是Linux下的日志型文件系统,被设计作为ext3的继任者.他消除了64位存储限制,是 ...
- 文件及文件夹更改通知/监测软件TheFolderSpy
TheFolderSpy是Windows环境下一个监测文件(夹)更改,删除,创建,重命名的绿色免安装小软件,并在文件及文件夹有更改时发送Email通知管理者 该软件使用.Net开发,所以需要安装.Ne ...
- android AIDL 入门讲解非常好的文章(网页代码着色给力)
转自: http://tech.cnnetsec.com/585.html