-1

我从 Brian Kernighan 和 Dennis Ritchie 编写的“The C Programming Language”中获得了以下代码。但是,它不会用 gcc 编译:

    #include <stdio.h>
    #include <string.h>
    #define MAXLINE 1000

    int getline(char *line, int max);

    {
     char line[MAXLINE];
     int found = 0;

     if (argc != 2)
      printf("Usage: find pattern\n");
     else
      while (getline(line, MAXLINE) > 0)
       if (strstr(line, argv[1])  != NULL) {
          printf("%s", line);
          found++;
       }
      return found;
    }

我得到的是:错误:预期的标识符或'('在'{'之前。

我究竟做错了什么?

4

5 回答 5

2

正如这个答案所说,您省略了声明main函数的行。

这一行:

int getline(char *line, int max);

是函数的声明getline必须在别处定义。(如果您删除了;,它也可能是完整定义的第一行getline,但这似乎不是本意。)

在这种情况下,意图似乎是在不同的源文件中定义它。您需要编译该源文件和这个源文件,然后使用链接器将它们组合成一个可执行程序。

不过,您可能会遇到另一个问题。一些实现提供了自己的非标准函数,称为getline,它与您声明它的方式不兼容。如果您使用 gcc,则需要使用禁止该非标准定义的选项进行编译,例如-ansior -std=c99。为简单起见,您可以考虑使用getline;以外的名称。get_line应该可以。

当然,您需要在某处定义getlineor函数。get_line(如果您愿意,可以将定义放在同一个源文件中,但我怀疑这个练习的目的是从多个源文件构建程序。)

于 2013-10-02T15:38:08.147 回答
1

;从中 删除

int getline(char *line, int max);  
                                ^
                                |
                             remove this semicolon 
于 2013-10-02T14:55:13.730 回答
1

我想你错过了这一行:

main(int argc, char *argv[])

在 Visual C++ 中调试时忽略 main() 中的参数

于 2013-10-02T15:02:56.340 回答
0
int getline(char *line, int max);   // <-- Delete that semi-colon
{
于 2013-10-02T14:55:05.643 回答
0

删除分号:

int getline(char *line, int max)

于 2013-10-02T14:55:12.670 回答