代码之家  ›  专栏  ›  技术社区  ›  Graphics Noob

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

  •  9
  • Graphics Noob  · 技术社区  · 15 年前

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

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

    是否仍然存在不支持混合声明和代码的C编译器系统?

    6 回复  |  直到 15 年前
        1
  •  7
  •   AnT stands with Russia    15 年前

    好吧,是/是您打算用C89/90还是C99编写代码?

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

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

        2
  •  5
  •   mlibby    15 年前

    如果你想成为 -pedantic 关于C99标准添加选项 -std=c99 .

    就我个人而言,我喜欢较旧的非混合样式,因为它可以更容易地直观地审核函数使用的内存类型,并在返回之前确定可能需要的空闲()-ing。

        3
  •  2
  •   JesperE    15 年前

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

        4
  •  1
  •   rmn    15 年前

    我不确定我会改变它。

    但是,如果您确实决定要这样做,那就非常简单(也许您应该这样做);只需在开始代码块后立即拥有所有声明。如果以后必须绝对定义它们,请使用另一个嵌套代码块。

        5
  •  1
  •   ZoogieZork    15 年前

    IVC,Visual C++不允许在C模式中混合声明和代码。

    一般来说,Visual C++在C99支持中一直处于滞后状态。然而,最近情况可能有所改善,无论如何,在C++模式下编译代码是可能的。

        6
  •  0
  •   Remo.D    15 年前

    我将消除这种特别的警告,因为混合代码和声明不是一个广泛支持的特性。

    事实上,我写的图书馆也有同样的问题。我使用的是可变宏,但似乎更受支持。

    为了确保我的库能被其他人真正使用,我将用尽可能多的编译器来测试它。我已经用VisualC++Express和Peles C做了,我会尝试其他(OpenWATCOM,MARS C和LCC-WI32)。

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