【问题标题】:_main() unresolved_main() 未解决
【发布时间】:2016-01-12 22:40:09
【问题描述】:

我使用 Visual Studio 2013 用 C 语言编写程序,但出现此错误: MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

我不知道它是什么意思以及如何解决它。这是代码:

#include<stdio.h>

int getArr(int arr[]){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&arr[i]);
    return n;
}

void putArr(int arr[],int n)
{
    for(int i=0;i<n;i++)
        printf("%d\t",arr[i]);
    printf("\n");
}

void sort(int Arr[],int nArr)
{
    for(int i=0;i<nArr-1;i++)
    {
        int minIndex=i;
        for(int j=i+1;j<nArr;j++)
            if(Arr[j]<Arr[minIndex])
                minIndex=j;
        int t=Arr[i];
        Arr[i]=Arr[minIndex];
        Arr[minIndex]=t;
    }
}

int main()
{
    int arr[100];
    int nArr;
    nArr=getArr(arr);
    sort(arr,nArr);
    putArr(arr,nArr);

    return 0;
}

【问题讨论】:

  • 看起来您正在尝试将一个简单的 C 程序编译为 Windows 控制台应用程序。如果我没记错的话,我认为需要将 main 命名为 tmain..
  • @EugeneSh.:这将违反标准,包括 MSVC - IIRC - 声称符合标准的 C90。
  • 看起来更像是损坏的工具链或错误的用法。 @AmirAli,请添加您正在使用的编译器以及如何调用它的信息。
  • @FelixPalmen 我使用常规的 Visual Studio 2013 和它自己的编译器
  • @AmirAli 所以都是在 VS 中完成的,没有命令行调用?那应该“正常工作”OOTB。在不分析代码的情况下,我可以向您保证,这不是导致 this 错误的代码。你应该在这里使用int main(void),但这也不是问题......

标签: c visual-studio visual-c++ visual-studio-2013


【解决方案1】:

使用命令行工具(通过“VS xxxx 的开发人员命令提示符”窗口),您编写的代码可以在 VS 2012、VS 2013 或 VS 2015 中正常构建。

Windows 主要用于 C/C++ 控制台应用程序的三种类型:

main:这是传统的 ANSI main,命令行参数为char*

wmain:这是 Unicode main,它以命令行参数为wchar_t*

_tmain:这是_TCHAR 版本,可以构建为ANSI 或Unicode。这是默认模板使用并设置为 Unicode 构建的内容。

如果您将void main() 更改为void wmain(),它也会生成,因为默认模板项目设置设置为“使用Unicode 字符集”,在命令行中添加/D_UNICODE /DUNICODE

如果您转到项目 -> 属性 -> 常规并将 字符集 设置为所有配置和所有平台的“使用多字节字符集”,那么您对 ​​void main() 的使用将成功关联。这使用/D_MBCS 作为命令行而不是/D_UNICODE /DUNICODE

也就是说,使用 VS 2013 的默认项目,即使不更改字符集设置,您的代码也可以很好地用您的 main 替换现有的 _tmain

【讨论】:

    【解决方案2】:

    Visual Studio 不希望用户声明变量以防万一或指示 使用声明作为函数语料库的开始。祝你好运

    #include<stdio.h>
    
    int getArr(int arr[]){
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&arr[i]);
    return n;
    }
    
    void putArr(int arr[],int n)
    {
    int i=0;
    for(i=0;i<n;i++)
    printf("%d\t",arr[i]);
    printf("\n");
    }
    
    void sort(int Arr[],int nArr)
    {
    int j, i=0;
    int t;
    
    for(i=0;i<nArr-1;i++)
    {
    int minIndex=i;
    for( j=i+1;j<nArr;j++)
    if(Arr[j]<Arr[minIndex])
    minIndex=j;
    t=Arr[i];
    Arr[i]=Arr[minIndex];
    Arr[minIndex]=t;
    }
    }
    
    
    int main()
    {
    int arr[100];
    int nArr;
    nArr=getArr(arr);
    sort(arr,nArr);
    putArr(arr,nArr);
    
    return 0;
    }
    

    【讨论】:

      【解决方案3】:

      您创建了一个 windows 应用程序项目,您应该在创建新项目时选择控制台应用程序,或者如果您想学习 win32 编程,您可以使用 以下链接:

      https://msdn.microsoft.com/en-us/library/windows/desktop/ff381398(v=vs.85).aspx http://www.catch22.net/

      http://pravin.paratey.com/win32/ http://www.win32developer.com/tutorial/windows/windows_tutorial_1.shtm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-31
        • 1970-01-01
        • 2011-06-27
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多