当声明不在函数的开头时VS2010能编译吗?

时间:2012-08-13 18:28:49

标签: c visual-studio-2010

新手问题。

我想让libcork用VS2010编译。

在C中,我猜你通常必须在函数的开头声明变量,如下所示:

void
cork_hash_table_clear(struct cork_hash_table *table)
{

    DEBUG("(clear) Removing all entries");

    size_t  i;  // <--- fails to compile unless moved before DEBUG.
    ...

但是libcork充斥着定义/声明,因为它们在代码中使用。我想知道是否有一个VS编译器选项允许这个?我很抱歉,如果这个问题不是新问题,但我得到的只是一个语法错误,我没有任何有用的术语来搜索VS文档。

1 个答案:

答案 0 :(得分:2)

函数中的混合声明和语句被引入到the 1999 version of the standard (C99)中的C中;不幸的是,VS决定不遵循1990年版以后的标准。

您可以将代码编译为C ++,尽管这可能会以有趣的方式破解,因为C不是C ++的严格子集。如果代码与C ++不兼容,Herb Sutter recommends使用Intel CC或gcc。

问题Visual Studio support for new C / C++ standards?有一些有趣的内容,虽然它也涵盖了C ++(VS在跟上节奏方面要好得多)。