如何从g ++使用-fpermissive启用_all_警告?

时间:2018-11-19 16:52:23

标签: c++ g++

在某些情况下,-fpermissive选项导致错误被完全忽略,而不是像广泛使用的文档所建议的那样“降级”为警告。

-Wall选项显然不够。为了使g ++报告所有此类降级的警告,还需要其他什么选项?

Nodejs C ++插件库提供了一个示例。

In file included from /opt/nodejs/linux64/8.9.4/include/node/node.h:63:0,
                 from /opt/nan/linux64/2.9.2/include/nan.h:51,
                 from /build/ndjs/include/blob.h:59,
                 from /build/ndjs/src/blob.cpp:2:
/opt/nodejs/linux64/8.9.4/include/node/v8.h: In instantiation of ‘v8::Local<T>::Local(v8::Local<S>) [with S = v8::Integer; T = v8::Int32]’:
/build/src/ndjs/blob.cpp:507:1:   required from here
/opt/nodejs/linux64/8.9.4/include/node/v8.h:207:5: error: invalid conversion from ‘v8::Integer*’ to ‘v8::Int32*’ [-fpermissive]
     TYPE_CHECK(T, S);
     ^

使用-fpermissive(当然还有-Wall)重新编译会产生干净的编译结果:完全没有警告。发生了什么? (即为什么?)

TYPE_CHECK()宏测试指针分配中的类型兼容性:

#define TYPE_CHECK(T, S)                                       \
  while (false) {                                              \
    *(static_cast<T* volatile*>(0)) = static_cast<S*>(0);      \
  }

向下转换失败(v8 :: Int32派生自v8 :: Integer),但是当-fpermissive生效时,在某种程度上成功运行而没有警告。不应就静态下垂发布警告吗?

0 个答案:

没有答案