Tag: c99

在MS Visual C ++中启用VLA(可变长度数组)?

如何在MS Visual C ++中启用使用C99中定义的VLA或可变长度数组,或者根本不可能? 是的我知道C ++标准是基于C89的,并且VGA在C89标准中不可用,因此在C ++中不可用,但MSVC ++也应该是C编译器,可以使用/ TC编译器参数( Compile as C Code (/TC) )。 但这样做似乎并没有启用VLA,并且编译过程在构建为C ++( Compile as C++ Code (/TP) )时会出现相同的错误。 也许MSVC ++ C编译器只符合C89或者我缺少一些东西(一些特殊的构造或pragma / define)? 代码示例: #include int main(int argc, char **argv) { char pc[argc+5]; /* do something useful with pc */ return EXIT_SUCCESS; } 编译错误: 错误C2057:预期的常量表达式 错误C2466:无法分配常量大小为0的数组 错误C2133:’pc’:未知大小

C99是否保证arrays是连续的?

在另一个问题的热门评论主题之后,我开始讨论C99标准中有关C数组的内容和内容。 基本上当我定义一个2D数组如int a[5][5] ,标准C99是否保证它将是一个连续的整数块,我可以将其转换为(int *)a并确保我将拥有一个有效的一维25个整数数组。 正如我理解标准的那样,上面的属性隐含在sizeof定义和指针算术中,但是其他人似乎不同意并且说要转换为(int *)上面的结构给出了一个未定义的行为(即使他们同意所有现有的实现实际分配连续的价值观)。 更具体地说,如果我们认为一种实现可以检测数组检查所有维度的数组边界并在访问1D数组时返回某种错误,或者不能正确访问第1行以上的元素。 这样的实施可以是标准的编译吗? 在这种情况下,C99标准的哪些部分是相关的。

VS2013中C99支持的官方状态是什么?

我看到VS2013增加了对C99的大量主要核心语言function的支持。 现在它支持复合文字,指定初始化器,可变参数宏,交错声明和语句,仅举几例。 这表明VS开发人员在Visual Studio中为C99支持做了认真的步骤。 然而,其中一些function并不是C ++语言的一部分,这似乎与之前宣布的开发策略有明显的偏差(例如“VS C编译器只支持那些也是C ++一部分的C99function”)。 那么,有什么官方或半官方的话说明发生了什么? 我似乎无法在网上找到任何确定的东西。 这些C99function是否正式公布? 是否承诺继续在VS中提供C99支持? 或者这只是某种“流氓”的非官方发展?

Microsoft Visual Studio 2010是否支持c99?

我想知道Microsoft Visual Studio 2010是否支持C99。 如果没有,我如何使用intptr_t和uintptr_t等标准类型?