2015-10-14 136 views
1

我使用的Visual Studio 2013程序寫在C,但我得到這個錯誤: MSVCRTD.LIB(crtexe.obj):錯誤LNK2019:無法解析的外部符號_main函數___tmainCRTStartup引用_main()未解決

我不「知道是什麼意思,以及如何解決it.this是代碼:

#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; 
} 
+0

看起來你正試圖編譯一個簡單的C程序作爲Windows控制檯應用程序。如果我記得正確的話,我認爲需要'main'命名爲'tmain'。 –

+0

@EugeneSh .:這與MSVC - IIRC聲稱符合的C90標準相違背。 – Olaf

+0

看起來更像是一個破碎的工具鏈或錯誤的用法。 @AmirAli,請添加您正在使用的編譯器的信息以及如何調用它。 –

回答

3

您的代碼書面構建細跟VS 2012,VS 2013,或2015年VS使用命令行工具(通過窗口中的「爲VS XXXX開發人員命令提示符」)。

Windows有三種類型的主要爲C/C++控制檯應用程序:

main:這是傳統的ANSI主這需要命令行參數作爲char*

wmain:這是Unicode主這需要命令行參數作爲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即使不改變字符集設置。

1

的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; 
}