zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    334 Increasing Triplet Subsequence 递增的三元子序列
    332 Reconstruct Itinerary 重建行程单
    331 Verify Preorder Serialization of a Binary Tree 验证二叉树的前序序列化
    330 Patching Array
    329 Longest Increasing Path in a Matrix 矩阵中的最长递增路径
    328 Odd Even Linked List 奇偶链表
    327 Count of Range Sum 区间和计数
    326 Power of Three 3的幂
    Java中的Class.forName
    巧用Java中Calendar工具类
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/6918463.html
Copyright © 2011-2022 走看看