无法使用gcc编译ANSI C代码

时间:2013-10-02 14:53:45

标签: c gcc ansi

我从Brian Kernighan和Dennis Ritchie编写的“C编程语言”中获得了以下代码。但是,它不会使用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;
    }

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

我做错了什么?

5 个答案:

答案 0 :(得分:2)

this answer所述,您省略了声明main函数的行。

这一行:

int getline(char *line, int max);

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

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

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

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

答案 1 :(得分:1)

中删除;
int getline(char *line, int max);  
                                ^
                                |
                             remove this semicolon 

答案 2 :(得分:1)

我想你错过了这一行:

main(int argc, char *argv[])

Arguments in main() ignored when debugging in Visual C++

答案 3 :(得分:0)

int getline(char *line, int max);   // <-- Delete that semi-colon
{

答案 4 :(得分:0)

删除分号:

int getline(char *line, int max)