缺少main()会阻止链接时的可执行文件创建

时间:2012-12-17 11:32:05

标签: c linker kernighan-and-ritchie

我在Windows上使用Microsoft Visual C ++。我编译好没有任何错误。但是,当我尝试执行它时,我遇到了两个错误。我读了调试错误,我无法理解它们。我在C编程方面有点新手。

此代码来自第61页的Kernighan和Ritchie的教科书:

#include <ctype.h>

/* atoi: convert s to integer; version 2 */
int atoi(char s[])
{
    int i, n, sign;

    for (i=0; isspace(s[i]); i++) /* skip white space */
        ;
    sign = (s[i] == '-') ? -1: 1;
    if (s[i] == '+' || s[i] == '-') /* skip sign */
        i++;
    for (n=0; isdigit(s[i]); i++)
        n = 10 * n + (s[i] - '0');
    return sign*n;
}

错误:

--------------------Configuration: 3.5 - Win32 Debug--------------------
Linking... LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/3.5.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. 3.5.exe - 2 error(s), 0 warning(s) 

3 个答案:

答案 0 :(得分:5)

这不是一个完整的计划。这只是一个功能。如果不编写一些代码来调用它,就无法执行它。

答案 1 :(得分:3)

每个C程序都需要一个入口点,main()提供了这个。

请参阅以下内容:

答案 2 :(得分:1)

我想知道你是怎么编写整个atoi函数的,而不知道main()的重要性。 :) 你应该写一个main()函数并像这样调用你的atoi

#include <stdio.h>//Required for printf used in main()
#include <ctype.h>

/* atoi: convert s to integer; version 2 */
int atoi(char s[])
{
    int i, n, sign;

    for (i=0; isspace(s[i]); i++) /* skip white space */
        ;
    sign = (s[i] == '-') ? -1: 1;
    if (s[i] == '+' || s[i] == '-') /* skip sign */
        i++;
    for (n=0; isdigit(s[i]); i++)
        n = 10 * n + (s[i] - '0');
    return sign*n;
}


/* This is the part you've been missing. */
int main(int argc, char **argv)
{
   printf("%d\n",atoi("-100"));
   return 0;
}

我还建议你:首先尝试用C ++编写一个hello world程序,然后再编写像这样的高级内容。