0

我有一个 program2.cc 代码。gcc program2.c 给出以下错误 - gcc 错误

我尝试了各种选择,例如

  1. gcc -std=gnu90 program2.c
  2. gcc -std=c90 program2.c
  3. gcc -std=c99 program2.c
  4. gcc -std=c11 program2.c
  5. gcc -std=gnu11 program2.c
  6. g++程序2.c

以上都没有编译文件。错误总是相似的。有没有办法编译这个?看起来 getline 不是 c 标准的一部分。但是一些编译器确实支持它。

有什么建议么?

4

1 回答 1

1

事实上,getline它从来都不是 C 标准库的一部分,而是一个 Unix/POSIX 扩展。要访问它,您需要在 Unix 下以 POSIX ("gnu") 模式使用 gcc 进行编译,在这种情况下,编译器会将函数丢弃在 stdio.h 中。在标准头文件中删除非标准函数是不合规的行为。

要使其在 Windows 下工作,您需要使用 Cygwin 在 Windows 下模拟 Unix。gcc/mingw 端口不行,因为它使用微软的 C 标准库。

好消息是,您可能无论如何都不想使用getline(即使在 POSIX 中),因为该函数具有可怕的 API,并且是有缺陷的 C 程序中内存泄漏的主要来源。这是应该避免的那些奇怪的、古老的 Unix 函数之一。而是考虑使用fgets调用者分配的缓冲区:更快、更安全、可移植的标准 C。

于 2021-02-15T10:00:22.020 回答