c语法问题/现在有些变化

时间:2010-09-25 17:01:42

标签: c compiler-errors

现在我只是想让我的getline()函数起作用。我有书中的代码,它似乎是相同的,但我不能让它编译。这是家庭作业,但这部分应该只是从书中复制。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//error list
#define ENDOFFILE = -1; 
#define TOOMANYNUMS = -2;
#define LIMIT = 256;

//functions declared
int get_line(char line[], int);

//main
main(){
char line[255];
int num[6];
printf("Please input numbers %c: ", line);
get_line(line,LIMIT);


}

//functions 
  int get_line(char s[],int lim){
  int c, i;
    for (i=0;i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
  s[i] = c;
if(c=='\n'){
s[i]=c;
  ++i; 
}
s[i]='\0';
return i;
}

现在(编辑于10:22)我只收到一个错误:

18 - 等于

之前的预期表达式

4 个答案:

答案 0 :(得分:2)

  

现在我只是想让我的getline()函数起作用。

getline()是Linux函数的名称,在stdio.h中声明。 C编译器抱怨说有两个冲突的声明。

只需为getline()功能提供不同的名称即可。


Edit1 :那:

#define ENDOFFILE = -1;

应该是

#define ENDOFFILE -1

预处理程序指令不需要=,没有;

答案 1 :(得分:2)

  

'getline'的冲突类型

getline可能是标准库中的一个函数,例如thisone。如果要重新实现它,请为其指定一个不同的名称。

  

函数'getline'的参数太少

你在main()中调用getline()而没有任何参数,但是你上面的几行声明getline采用char []和int。称之为getline(line,sizeof line);

答案 2 :(得分:1)

问题似乎是您正在编译此系统的系统似乎已经定义了getline()函数,并且您的定义与此相矛盾。似乎glibc(Linux上使用的C库)具有在stdio.h中声明的非标准getline()函数。除非您包含#define _GNU_SOURCE之类的行来选择包含非标准函数,否则不应该定义它,但可能是根据您编译代码的方式预先定义的。

最简单的解决方案是将您的函数重命名为其他内容,但您也可以尝试在编译器选项中找到为什么要启用GNU扩展。

既然您已经编辑了代码,那么您的第二个问题就是#define行是错误的。你不需要一个平等或分号;这些由preprocessor处理,其语法与C不同,您需要做的就是写#define NAME VALUE

正确的语法是:

#define ENDOFFILE -1
#define TOOMANYNUMS -2
#define LIMIT 256

答案 3 :(得分:0)

你需要意识到:

  1. 写一般是一个错误 像你写的那样#define宏,因为#define宏是 简单的字符串替换,所以这个 语句get_line(行,LIMIT)是 实际上是get_line(行,= 256;) 由编译器处理,然后 发生编译错误。只是 改变#define LIMIT = 256;至 #define LIMIT 256就可以了。
  2. 如前所述 回复,永远不要写代码 提供的库,getline是stdio.h中定义的函数。
  3. 希望这会有所帮助。