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

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

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

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

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

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

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

如果你想对C99标准-pedantic了解,请添加选项-std=c99

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

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

我不确定我会改变它。

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

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

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

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

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

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

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