我从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;
}
我得到的只是: 错误:预期标识符或'('在'{'之前。
我做错了什么?
答案 0 :(得分:2)
如this answer所述,您省略了声明main
函数的行。
这一行:
int getline(char *line, int max);
是getline
函数的声明,必须在别处定义。 (如果您删除;
,它也可能是getline
的完整定义的第一行,但这似乎不是意图。)
在这种情况下,意图似乎是在不同的源文件中定义它。您需要编译该源文件和此文件,然后使用链接器将它们组合成可执行程序。
但是,您可能遇到另一个问题。某些实现提供了自己的非标准函数getline
,并且它与您声明它的方式不兼容。如果您正在使用gcc,则需要使用禁止非标准定义的选项进行编译,例如-ansi
或-std=c99
。为简单起见,您可以考虑使用getline
以外的名称; get_line
应该没问题。
当然,您需要在某处定义getline
或get_line
功能。 (如果您愿意,可以将定义放在同一个源文件中,但我怀疑这个练习的目的是从多个源文件构建程序。)
答案 1 :(得分:1)
从
中删除;
int getline(char *line, int max);
^
|
remove this semicolon
答案 2 :(得分:1)
答案 3 :(得分:0)
int getline(char *line, int max); // <-- Delete that semi-colon
{
答案 4 :(得分:0)
删除分号:
int getline(char *line, int max)