我对 [K&R88] 深陷其中,并且受到了 gcc
的责备,因为 K&R 用作示例和练习 Material 的函数 getline()
是现在在 stdio.h
中(据我所知,自 2010 年左右以来一直如此。)
是否有任何方式告诉编译器像 1988 年一样播放它,并让我的朴素版本取代库中的版本?
(是的,这是徒劳的,但在 [K&R88] 中填充是我的新爱好;-)
强制编译器输出:
gcc -g -Wall -o "pgm" "pgm.c" (in directory: /home/eric/Development/6.087)
pgm.c:9:7: error: conflicting types for ‘getline’
9 | char *getline(){
| ^~~~~~~
In file included from pgm.c:1:
/usr/include/stdio.h:616:18: note: previous declaration of ‘getline’ was here
616 | extern __ssize_t getline (char **__restrict __lineptr,
| ^~~~~~~
Compilation failed.
最佳答案
与您的冲突的 getline
函数不是标准 C 的一部分 - 它是 POSIX 的 getline .
如果您使用 -std
使用标准 C 进行编译:
gcc -g -Wall -std=c17 -o pgm pgm.c
你可以避免冲突。
话虽如此,如果您是从 C 开始,就没有理由向 K&R C 学习(在我看来,它更像是一个引用)。而且我们也不会回到 1988 年;-)
此后语言发生了很大变化,The Definitive C Book Guide and List 提供了一份很好的建议列表。 .
关于stdio.h 中的函数 getline() 可以与 K&R88 中的函数共存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71147184/