C程序问题与函数原型

时间:2014-05-27 06:07:23

标签: c

我正在阅读Denis写的C程序书,我正在练习他的例子。我自己尝试了这个例子,然后从书中复制粘贴相同的例子。我得到了跟随错误。

代码:

#include <stdio.h>
#define MAXLINE 1000    /* maximum input line size */

int getline(char line[], int maxline);
void copy(char to[], char from[]);

/* print longest input line */
main()
{
    int len;            /* current line length */
    int max;            /* maximum length seen so far */
    char line[MAXLINE];     /* current input line */
    char longest[MAXLINE];  /* longest line saved here */

    max = 0;
    while ((len = getline(line, MAXLINE)) > 0)
        if (len > max) {
            max = len;
            copy(longest, line);
        }
    if (max > 0)    /* there was a line */
        printf("%s", longest);
    return 0;
}

/* getline:  read a line into s, return length */
int getline(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;
}

/* copy:  copy ′from′ into ′to′; assume to is big enough */
void copy(char to[], char from[])
{
    int i;

    i = 0;
    while ((to[i] = from[i]) != ′\0′)
        ++i;
}

错误:

ex16.c:4:5: error: conflicting types for 'getline'
int getline(char line[], int maxline);
    ^
/usr/include/stdio.h:440:9: note: previous declaration is here
ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict) __OSX_AVAILABLE_...
        ^
ex16.c:8:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^~~~
ex16.c:16:40: error: too few arguments to function call, expected 3, have 2
    while ((len = getline(line, MAXLINE)) > 0)
                  ~~~~~~~              ^
/usr/include/stdio.h:440:1: note: 'getline' declared here
ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict) __OSX_AVAILABLE_...
^
ex16.c:27:5: error: conflicting types for 'getline'
int getline(char s[], int lim)
    ^
/usr/include/stdio.h:440:9: note: previous declaration is here
ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict) __OSX_AVAILABLE_...
        ^
1 warning and 3 errors generated.

我正在使用函数原型只是我猜。也提及其他互联网资源。我不确定它是否因为编译器。我正在使用Gcc 4.3版。 OS - mac maverics。

你能帮帮我吗?

感谢。

2 个答案:

答案 0 :(得分:4)

只需在您声明,定义和使用它的地方调用您的函数getlineMy()

getline()已在stdio.h (link) 中声明,其实现将链接到您的程序,因此除非您采用技巧,否则不能使用该名称。

答案 1 :(得分:3)

您必须设置GCC以将代码编译为C。

gcc -std=c99 -pedantic-errors -Wall

然后您将收到一个错误:

  

8:1:错误:返回类型默认为'int'

这是因为你对main()使用了错误的定义。将其更正为int main()

名称getline可以正常使用,stdio.h和the compiler is not allowed to add functions中没有这样的函数是该标题内的非标准扩展,而没有用{{1}命名它们}前缀。