【问题标题】:Variable length arrays C99 not supported in CC 中不支持可变长度数组 C99
【发布时间】:2011-12-13 20:03:25
【问题描述】:

在 Visual Studio 2005 中,我正在尝试编译一个 .c 文件:

int i = 6;
int a[i];

它不起作用,那么我的编译器遵循哪个标准?

【问题讨论】:

  • 解决方法是使用malloc() -- 它的优点是可以让您检测分配失败。
  • 我正在阅读一本遵循 C89/C99 标准的书。我应该买一本新书吗?我也不知道 gcc。
  • 是哪本书? C99 标准当然值得了解,但微软采用它的速度特别慢。最好了解 C90 中哪些是新特性,哪些是 C90 中可用的(几乎所有编译器都支持)。
  • 就是这个book我不知道是书错了还是编译器错了。
  • 我听说过关于那本书的好消息,虽然我自己没有读过。这本书和编译器实际上都没有错。这本书显然描述了 1999 年版本的 C 语言;上的编译器(或多或少)实现了 1990 版本。可变长度数组于 1999 年被添加到该语言中。

标签: c variable-length-array


【解决方案1】:

Visual Studio 仅支持 C89/90。他们不支持 C99。因此,您不能在 Visual Studio 中使用可变长度数组。此外,Microsoft 没有计划在其 C 编译器中添加对 C99 的支持。

【讨论】:

  • VS 甚至不支持 C89。它支持 MS 卡住的 C 的一些混蛋......
  • @R..:真的吗?据我所知,它对 C89/C90 标准的支持相当不错(尽管您必须为其提供一些非默认选项)。
  • 至少它不能正确支持1995年添加的宽字符界面;例如,wprintf(L"%s\n", "hello"); 不起作用。我无法立即想到这些示例,但我很确定某些原始 C89 函数也存在严重的不符合问题,并且可能与预处理器的行为有关。
  • @R.. 嗯,应该 wprintf(L"%s\n", "hello"); 工作吗?我确定它应该支持wprintf(L"%hs\n", "hello");wprintf(L"%s\n", L"hello");...
  • @Medinoc:它应该按照 C 语言的要求将字符串“hello”,后跟换行符打印到标准输出。您的第一个选择是错误的; %hs 是无效的格式说明符。第二种选择也是错误的。 %s 需要一个指向字符串的指针(char 的空终止数组)作为其参数,而不是指向宽字符串的指针。
猜你喜欢
  • 2012-01-25
  • 2018-10-03
  • 2012-01-29
  • 2014-08-16
  • 2021-04-02
  • 2015-12-18
  • 2011-04-16
  • 2018-06-27
相关资源
最近更新 更多