Here is a program I\'m trying to run straight from section 1.9 of \"The C Programming Language\".
#include
#define MAXLINE 1000
int getline(
/usr/include/stdio.h:671:20: note: previous declaration of ‘getline’ was here
That should give you a hint. Try and rename the getline()
function in the code to something else.
Also, declaring main()
this way is old style. A function with no declared return type and arguments, by defaults, accepts an unspecified number of arguments and returns an int. This is nearly the case for main()
: it does return an int, but has two arguments. You had better declare it as:
int main(int argc, char **argv)
or:
int main(int argc, char *argv[])
The is already a function called getline defined in the "stdio.h" file. Thus a conflict in prototypes! Rename your function to "my_getline" or some other name and all should be fine!
This is because the stdio.h
have a getline()
function.
So a simple thing to make this work would be to rename your function to my_getline()
Both getline()
and getdelim()
were originally GNU
extensions. They were standardized in POSIX.1-2008
.
The problem is that getline()
is a standard library function. (defined in stdio.h
) Your function has the same name and is thus clashing with it.
The solution is to simply change the name.
The conflicting function getline() is a GNU/POSIX extension.
K&R state that they address specifically ANSI C in their book (c.f.), which does not provide this function.
The authors present the complete guide to ANSI standard C language programming.
In order set gcc into "K&R compatibility mode" you can specify the ANSI or ISO modes for compilation. These are intended to disable extensions, e.g., the function getline()
.
This could eventually eliminate the need to edit other examples provided by K&R as well.
For example, the following compile just fine:
$ gcc test.c -ansi
$ gcc test.c -std=c89
(Except that they complain about the implicit default return type of main()
with -Wall
.)
Apparently on some systems, these modes may not work as presented here (apparently some version(s) of Mac OS fail to correctly disable all extensions). I tested this successfully on my machine:
$ gcc --version
gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
You have to change getline's name because it already exists.