【发布时间】:2017-11-14 23:23:25
【问题描述】:
我需要这样做:
scanf("%ms", ...)
并用
编译它g++ -Wall -pedantic -std=c++11
还有
gcc -Wall -pedantic -std=c99
它会打印警告:ISO C 不支持 'm' scanf 标志。 我该如何解决?
【问题讨论】:
-
您想使用 C++ 还是 C?在 C++ 中,您应该只使用
std::string。 -
这在
man 3 scanf的"NOTES" 部分中有详细说明。分配的a和m都是非标准扩展。它们需要一个指向char的指针,而不是指向char的指针作为变量参数。 -
解决这个问题的唯一方法是在 ISO C 标准委员会工作,让修饰符成为标准 C 的一部分(这仍然不会使它在 C99 或 C11 中有效——那个特别机会已经飞逝,除非你手边有一台时间机器)。请注意,并非所有 POSIX 系统都支持它;具体来说,例如,直到并包括 High Sierra 10.13 的 macOS 不支持它。这是一个非常有用的功能,它被支持;并非所有地方都支持它。因此,您必须为不可用的系统设计一种解决方法,即使您想在可用的地方使用它。
-
什么是“解决”您的问题?不更改对
scanf()的呼叫但抑制警告?更改代码以便不会因为调用不同的函数而生成警告?您打算只使用 GCC 还是必须使用其他编译器?
标签: c