stdio.h 中的函数 getline() 可以与 K&R88 中的函数共存吗?

标签 c stdio kernighan-and-ritchie

我对 [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/

相关文章:

c - 如何停止从C中的文件中读取

c - k&r 中的“entab”锻炼计划

c - 更好地理解 printf - 当提供的值为负时,它用 "%c"打印什么?

无法找到 K&R 练习 4-6 的解决方案

c - fgetc内部如何工作

command-line - 如何在命令行上运行Markdown Extra?

mysql - 读取 row = mysql_fetch_row(result) 返回的 mySQL 数据库的行集,这是一个字符串数组,用于从中提取各个字段

C:即使条件仍然满足,循环也会弹出

c - 在 C 中访问多维字符串数组的元素

c - 我正在用 C 构建基本统计头文件并遇到问题