getline 函数不使用 mingw-w64 gcc 编译
getline function not compiling with mingw-w64 gcc
我有一个 program2.c c 代码。
gcc program2.c 给出以下错误 -
我尝试了各种选项,例如
- gcc -std=gnu90 program2.c
- gcc -std=c90 program2.c
- gcc -std=c99 program2.c
- gcc -std=c11 program2.c
- gcc -std=gnu11 program2.c
- g++ program2.c
None上面的编译文件。错误总是相似的。
有没有办法编译这个?
看起来 getline 不是 c 标准的一部分。但是一些编译器确实支持它。
有什么建议吗?
的确,getline
从来都不是 C 标准库的一部分,而是 Unix/POSIX 的扩展。要访问它,您需要在 Unix 下以 POSIX(“gnu”)模式使用 gcc 进行编译,在这种情况下,编译器会将函数丢弃在 stdio.h 中。在标准 headers 中删除 non-standard 函数是 non-compliant 行为。
要在 Windows 下运行此功能,您需要使用 Cygwin 在 Windows 下模拟 Unix。 gcc/mingw 端口不行,因为那个端口使用 Microsoft 的 C 标准库。
好消息是你可能不想使用 getline
无论如何(即使在 POSIX 中),因为那个函数有一个可怕的 API 并且是一个主要来源针对有问题的 C 程序中的内存泄漏。这是应该避免的那些奇怪的、古老的 Unix 函数之一。相反,请考虑将 fgets
与 caller-allocated 缓冲区一起使用:更快、更安全、可移植的标准 C.
我有一个 program2.c c 代码。
gcc program2.c 给出以下错误 -
我尝试了各种选项,例如
- gcc -std=gnu90 program2.c
- gcc -std=c90 program2.c
- gcc -std=c99 program2.c
- gcc -std=c11 program2.c
- gcc -std=gnu11 program2.c
- g++ program2.c
None上面的编译文件。错误总是相似的。 有没有办法编译这个? 看起来 getline 不是 c 标准的一部分。但是一些编译器确实支持它。
有什么建议吗?
的确,getline
从来都不是 C 标准库的一部分,而是 Unix/POSIX 的扩展。要访问它,您需要在 Unix 下以 POSIX(“gnu”)模式使用 gcc 进行编译,在这种情况下,编译器会将函数丢弃在 stdio.h 中。在标准 headers 中删除 non-standard 函数是 non-compliant 行为。
要在 Windows 下运行此功能,您需要使用 Cygwin 在 Windows 下模拟 Unix。 gcc/mingw 端口不行,因为那个端口使用 Microsoft 的 C 标准库。
好消息是你可能不想使用 getline
无论如何(即使在 POSIX 中),因为那个函数有一个可怕的 API 并且是一个主要来源针对有问题的 C 程序中的内存泄漏。这是应该避免的那些奇怪的、古老的 Unix 函数之一。相反,请考虑将 fgets
与 caller-allocated 缓冲区一起使用:更快、更安全、可移植的标准 C.