在''之前预期'=',',',';','asm'或'__attribute__'。令牌 - 未在论坛中列出的案例

时间:2014-04-05 10:29:09

标签: c gcc token

我复制了以下代码来自“C编程语言”第69页:

#include <stdio.h>

#define MAXLINE 1000 /* maximum input line length */

int getline (char line[], int max)
int strindex (char source[], char searchfor[]);

char pattern[] = "ould"; /* pattern to search for */
/* find all lines matching pattern */

int main()
{

  char line[MAXLINE];
  int found = 0;

  while (getline(line, MAXLINE) > 0)

    if (strindex(line, pattern) >= 0) 
    {
      printf("%s", line);
      found++;
    }

  return found;
}

/* getline: get line into s, return length */
int getline(char s[], int lim)
{

  int c, i;
  i = 0;

  while ( (--lim > 0) && (c=getchar() != EOF) && (c != '\n'))
    s[i++] = c;

  if (c == '\n')
    s[i++] = c;

  s[i] = '\0';
  return i;
}

/* strindex: return index of t in s, -1 if none */
int strindex(char s[], char t[])
{

  int i, j, k;

  for (i = 0; s[i] != '\0'; i++) 
  {
    for (j=i, k=0; t[k]!='\0' && s[j]==t[k]; j++, k++);
      if (k > 0 && t[k] == '\0')

    return i;
  }

  return -1;
}

我准备了这个名为“makefile”的简单make文件

mypage69: page69.o
    gcc -g -ansi -Wall page69.o -o mypage69

page69.o: page69.c
    gcc -c -ansi -Wall page69.c -o page69.o

但是,当我在linux shell上输入“make”命令时:

VirtualBox:~/Desktop/Exercises/Book/mypage69$ make
gcc -c -ansi -Wall page69.c -o page69.o
page69.c: In function ‘getline’:
page69.c:8:1: error: parameter ‘pattern’ is initialized
page69.c:12:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
page69.c:30:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
page69.c:47:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
page69.c:5:5: error: old-style parameter declarations in prototyped function definition
page69.c:60:1: error: expected ‘{’ at end of input
page69.c:60:1: warning: control reaches end of non-void function [-Wreturn-type]
make: *** [page69.o] Error 1
VirtualBox:~/Desktop/Exercises/Book/mypage69$

有人可以帮忙吗?这里只有1个c文件。

感谢。

2 个答案:

答案 0 :(得分:5)

int getline (char line[], int max)
                                  ^

你忘记了分号。

应该是:

int getline (char line[], int max);

答案 1 :(得分:0)

你可能在for (j=i, k=0; t[k]!='\0' && s[j]==t[k]; j++, k++);

结尾处有一个额外的\不需要的分号