>Synopsis: conflicting types for 'getline'
>Category: library
>Environment:
System : OpenBSD 5.2
Details : OpenBSD 5.2 (GENERIC.MP) #339: Wed Aug 1 10:13:24 MDT
2012
[email protected]:/usr/src/sys/arch/i386/compile/GENERIC.MP
Architecture: OpenBSD.i386
Machine : i386
>Description:
The program on page 29 of K&R fails to compile with gcc -ansi,
producing the error message
test.c:4: error: conflicting types for 'getline'
/usr/include/stdio.h:244: error: previous declaration of
'getline' was here
The problem is that the getline function has been recently
introduced to OpenBSD's stdio.h header file. See
http://marc.info/?l=openbsd-cvs&m=133237357129322
But the declaration of getline in this header violates the ISO
C90 standard, since getline is not a reserved identifier in the
standard and subclause 7.1.3 of the standard states that "No
other identifiers are reserved".
>How-To-Repeat:
Place the program on page 29 of K&R in a file named test.c. Or
alternatively, place the following program in test.c.
#include <stdio.h>
int getline();
main()
{
return getline();
}
int getline()
{
return 0;
}
Then, compile this program using the command
gcc -ansi test.c
>Fix:
The -ansi option for gcc should hide the declaration of getline
in stdio.h.