“混合声明和代码”警告,是否值得解决?

时间:2009-12-29 17:42:22

标签: c compiler-warnings

我最近在gcc上启用了-pedantic选项,现在我已经有两到三页的“ISO C90禁止混合声明和代码”警告。

我对这个项目的目标是能够使用ac编译器在任何主流系统上部署它,所以我意识到假设C99将在任何地方都得到支持是不明智的,但是它甚至值得我花时间来解决这些警告?

是否还有那些不支持混合声明和代码的c编译器系统?

6 个答案:

答案 0 :(得分:7)

那么,您是否打算在C89 / 90或C99中编写代码?

由于这是您似乎唯一关注的警告,显然您的代码实际上是用C89 / 90编写的。如果确实如此并且你打算坚持使用C89 / 90,那么我会坚持使用严格的C89 / 90并将所有声明移到块的开头。

另一方面,如果您愿意并计划切换到C99,那么“错放”声明不再是问题。然后您的主要关注点成为平台/编译器支持。 MS Visual Studio C编译器是C89 / 90编译器。这是一个问题吗? (考虑到GCC在Windows平台上可用)。

答案 1 :(得分:5)

如果您希望{C}标准为-pedantic,请添加选项-std=c99

我个人喜欢旧的未混合样式,因为它可以更容易地直观地审核函数使用的内存类型,并在返回之前决定可能需要free()的内容。

答案 2 :(得分:2)

Visual Studio C编译器不允许混合声明和代码。微软可能永远不会为Visual Studio添加完整的C99支持;在Windows世界中,C不够重要。

答案 3 :(得分:1)

我不确定我会改变它。

然而,如果你确定你想做,那很容易(也许你应该这样做);在开始代码块之后立即拥有所有声明。如果您绝对必须在以后定义它们,请使用另一个嵌套代码块。

答案 4 :(得分:1)

IIRC,Visual C ++不允许在C模式下使用混合声明和代码。

Visual C ++在C99支持方面一直落后。但是最近情况可能有所改善,无论如何都可以用C ++模式编译代码。

答案 5 :(得分:0)

我会消除该特定警告,因为混合代码和声明不是广泛支持的功能。

实际上,我正在编写的库有同样的问题。我正在使用可变参数宏,但似乎更受支持。

为了确保我的库真的可以被其他人使用,我将使用尽可能多的编译器来测试它。我已经使用Visual C ++ Express和Pelles C完成了它,我将尝试其他一些(至少OpenWatcom,Mars C和lcc-Win32)。

不幸的是,SourceForge不再提供像几年前那样的编译器场,而且我无法在商业Unix编译器上测试它。