【问题标题】:Is there a way to disable certain errors under VS2008?有没有办法在 VS2008 下禁用某些错误?
【发布时间】:2014-04-16 09:01:03
【问题描述】:

我正在尝试使用 VS2008 编译大量遗留的 C (C99) 代码。为了解决 VS2008 编译器不支持的 C99 代码的一些问题,我切换到 C++ 编译器,但我现在面临另一个 C++ 转换错误的问题:

 error C2440: '=' : cannot convert from 'void *' to 'uint8_t *'
 Conversion from 'void*' to pointer to non-'void' requires an explicit cast

在 C++ 编译器上是否有设置来禁用该错误并在 C++ 中构建时允许 C 样式转换?

【问题讨论】:

  • 修复 C99 代码中的 (C++) 错误,或者(如果这不可能/不可行)围绕原始源提供一个包装 C 库

标签: c++ c visual-studio-2008


【解决方案1】:

无法禁用这些错误。这些是语言定义的硬错误。您无法选择要遵守的核心语言的哪些部分。如果这些是供应商特定的扩展,那么可能会有禁用它们的选项,但事实并非如此。这些错误与 C++ 语言的基本规则有关。

我的建议是使用真正的 C99 编译器编译此代码。任何使用 MSVC 2008(C 或 C++)编译它的尝试都会导致失望和痛苦。

最新版本的 MSVC 使用此代码可能会更好。在 MSVC 的最新版本中,Microsoft 有 improved support for C99 when compiling as C。这种对 C99 的支持并不完整,但它可能足以正确编译您的代码。

【讨论】:

  • C++ 中没有从 void* 到 T* 的隐式转换(因此最近的 msvc 编译器不应该支持它)
  • @DieterLücking 正确。我的意思是VS2013在编译为C时对C99有更好的支持。
  • 事实上,我在开始之前尝试估计我拥有的不同选项及其各自的成本,感谢您的回答,这也是我的想法,即编译器不应该在万一错误被忽略...(编写编译器会变得很困难!)
猜你喜欢
  • 2011-11-26
  • 2011-09-12
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多