Dav*_*d X 9 g++ suppress-warnings
我正在尝试用g ++编译一些c代码(是的,故意的).我收到错误(例如):
error: invalid conversion from 'void*' to 'unsigned char*' [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
添加-fpermissive到编译选项让我:
error: invalid conversion from 'void*' to 'unsigned char*' [-Werror=permissive]
Run Code Online (Sandbox Code Playgroud)
这似乎是一个错误,因为-Werror,但添加-Wno-error=permissive -Wno-permissive结果:
error: -Werror=permissive: no option -Wpermissive
error: unrecognized command line option "-Wno-permissive" [-Werror]
Run Code Online (Sandbox Code Playgroud)
如何禁用从void*到其他指针类型的转换警告(全局)?
您不能"禁止转换void*为其他指针类型的警告",因为这不是警告 - 这是语法错误.
这里发生的是你正在使用-fpermissive哪些错误 - 包括这一个 - 降级警告,因此允许你编译一些不符合代码(显然许多类型的语法错误,如缺少大括号,不能降级为警告,因为编译器无法知道如何修复它们以将它们变成可理解的代码).
然后,您还使用-Werror将所有警告升级为错误,包括-fpermissive将您的错误转换为"警告" .
-Wno-error仅用于否定-Werror,即它会导致-Werror将所有警告视为错误,但指定的警告除外,这些警告-Wno-error仍然是警告.正如-W标志所暗示的那样,这两个标志都有警告,所以他们不能对这个特定问题做任何事情,因为你在这里有一个错误.这种无效转换没有"警告",您可以关闭和打开,-Werror因为它不是真正的警告 - 这是一个错误,-fpermissive只是导致被视为警告.
在这种情况下,您可以使用而不是使用来编译不合格的代码.这仍然会给你一个警告,但是像所有警告一样,它不会阻止成功编译.如果你故意尝试编译不合格的代码,那么使用是没有意义的,因为你知道你的代码包含错误,因此会导致警告,即使是,所以指定相当于说"请不要编译我的不合格代码,即使我刚刚问过你."-fpermissive-Werror-Werror-fpermissive-Werror
你能用g ++来抑制警告的最远的方法就是使用-fsyntax-only它来检查语法错误而不是别的,但是因为你在这里有一个语法错误,这对你没有帮助,你能做的最好的就是这变成了警告-fpermissive.