我从 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;
}
我得到的只是: 错误:“{”之前应有标识符或“(”。
我做错了什么?
最佳答案
如this answer说,您省略了声明 main
函数的行。
这一行:
int getline(char *line, int max);
是 getline
函数的声明,必须在其他地方定义。 (如果您删除了 ;
,它也可能是 getline
的完整定义的第一行,但这似乎不是意图。)
在这种情况下,其意图似乎是在不同的源文件中定义它。您需要编译该源文件和这个源文件,然后使用链接器将它们组合成一个可执行程序。
不过,您可能会遇到另一个问题。某些实现提供了自己的非标准函数,称为 getline
,并且它与您声明它的方式不兼容。如果您使用的是 gcc,则需要使用禁止该非标准定义的选项进行编译,例如 -ansi
或 -std=c99
。为简单起见,您可以考虑使用 getline
以外的名称; get_line
应该没问题。
当然,您需要在某处定义 getline
或 get_line
函数。 (如果您愿意,可以将定义放在同一个源文件中,但我怀疑此练习的目的是从多个源文件构建程序。)
关于无法使用 gcc 编译 ANSI C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19139956/