我正在尝试使用g ++编译一些C代码(是的,是有目的的)。我收到类似的错误:
error: invalid conversion from 'void*' to 'unsigned char*' [-fpermissive]
添加-fpermissive
到编译选项让我:
error: invalid conversion from 'void*' to 'unsigned char*' [-Werror=permissive]
由于,这似乎是一个错误-Werror
,但是将-Wno-error=permissive -Wno-permissive
结果添加到:
error: -Werror=permissive: no option -Wpermissive
error: unrecognized command line option "-Wno-permissive" [-Werror]
如何禁用从void *到其他指针类型的转换的警告(全局)?
您不能“禁用从void*
向其他指针类型转换的警告”,因为这不是警告-这是语法错误。
此处发生的事情是您正在使用-fpermissive
它将某些错误(包括该错误)降级为警告,因此可以编译一些不符合要求的代码(显然,许多语法错误类型(例如缺少花括号)无法降级为警告,因为编译器无法知道如何修复它们以将其转换为易于理解的代码)。
然后,您还将使用-Werror
它将所有警告升级为错误,包括将-fpermissive
错误转化为的“警告” 。
-Wno-error
仅用于求反-Werror
,-Werror
即将所有警告视为错误,但用指定的警告除外,这些警告-Wno-error
仍保留为警告。就像该-W
标志所暗示的那样,这两个标志都与警告一起使用,因此它们对这个特定问题无能为力,因为您在这里遇到的是一个错误。对于这种无效的转换,没有“警告”,您可以关闭或打开-Werror
它,因为它不是真正的警告-这是一个错误,-fpermissive
仅导致被视为警告。
在这种情况下,您可以使用和不使用来编译不合格的代码。这仍然会给您一个警告,但是像所有警告一样,它不会阻止编译成功。如果您故意尝试编译不合格的代码,则使用是没有意义的,因为您知道您的代码包含错误,因此即使使用也会导致警告,因此指定等效于说“请不要编译我的不合格代码”代码,即使我刚刚已经要求您这样做。”-fpermissive
-Werror
-Werror
-fpermissive
-Werror
使g ++抑制警告的最大方法是使用-fsyntax-only
它将检查语法错误,而没有其他任何检查,但是由于这里的语法错误,对您无济于事,而您能做的最好的就是变成了警告-fpermissive
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句