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
  • 相关阅读:
    NTP服务编译安装报错:/usr/bin/ld: cannot find –lcap
    NTP服务编译安装报错:ntpd.c:124:29: 致命错误:sys/capability.h:没有那个文件或目录
    yum运行报错:/usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_locks
    yum运行报错:libcurl.so.4: cannot open shared object file: No such file or directory
    Xftp工具连接 报错: 无法与 “ 目标IP ” 连接
    yum运行报错:File "/usr/libexec/urlgrabber-ext-down", line 28
    webkit content-type missing in HTTP
    快速排序算法中选择“基准“点的方法
    数据结构与算法--归并排序
    数据结构与算法--拓扑排序
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/6918463.html
Copyright © 2011-2022 走看看