我需要做这样的事情:
scanf("%ms", ...)
并使用
进行编译g++ -Wall -pedantic -std=c++11
还有
gcc -Wall -pedantic -std=c99
并打印警告:ISO C不支持'm'scanf标志。 我该如何解决?
答案 0 :(得分:0)
%ms表示法是scanf()中的POSIX扩展名,与scanf()的标准C版本相比
答案 1 :(得分:0)
onSubmit() {
this.setState({value1: '', value2: ''});
}
格式由POSIX指定,而不是由ISO C指定。
通过使用%ms
,您已经请求诊断违反C99标准的代码(正如您的行为未定义)。
如果您希望代码可以移植到ISO C99(或C11)实现,请不要使用-Wall -pedantic -std=c99
。
如果您需要使用%ms
(使您的代码不那么可移植,但它应该适用于任何符合POSIX的实现),请不要使用这些选项。删除%ms
选项似乎足以抑制警告。 gcc之外的编译器可能有不同的选项来实现这一点(虽然clang非常密切地复制gcc)。
答案 2 :(得分:0)
回答:放弃-pedantic
,或放弃%ms
。他们没有走到一起。
AFAIK,没有像ISO C标准中的%ms
格式说明符。它被POSIX添加为扩展名。
命令行参数-pedantic
告诉GCC 严格遵循ISO C标准,因此它不接受带有该选项的%ms
。
如果您的程序定位到POSIX系统,那么删除-pedantic
就可以了。否则,如果您想使代码可移植,请不要在%ms
/ printf
中使用scanf
。