VS2013中的C99 stdint.h错误

时间:2015-09-28 13:02:32

标签: c visual-studio-2013 c99

有什么理由说下面的代码不起作用? (编译为C代码)

#include <stdint.h>

int main()
{
    int var = 10;
    if (var == 0) return 1;
    uint8_t data;
    return 0;
}

错误消息

  

错误3错误C2065:&#39;数据&#39; :未声明的标识符   错误2错误C2146:语法错误:缺少&#39 ;;&#39;在标识符&#39;数据&#39;之前   错误1错误C2275:&#39; uint8_t&#39; :非法使用此类型作为表达式

这可能是vs2013中的错误吗?

要解决上述问题,可以执行以下任何操作:

  • 支持中的return语句将修复此问题,即if(var == 0){return; }
  • 在if语句之前删除uint8_t数据
  • 使用unsigned char而不是uint8_t
  • 使用C ++编译&#34;编译为C ++代码&#34; (项目属性 - > C / C ++ - &gt;高级 - &gt;编译为)

更新:vs2015(vs140)似乎没有这个&#34;错误&#34;

2 个答案:

答案 0 :(得分:4)

Visual Studio C编译器在遵循后来的标准方面一直非常糟糕,有一次甚至说他们不会支持所有IIRC的C99(或更高版本)。这意味着C编译器只支持C89,它不允许您在任何地方放置变量声明,只在块的开头。

所以你需要做

int var = 10;
uint8_t data;   /* Moved declaration here */
if (var == 0) return;

应该注意的是,微软已经改变了对C和后来的C标准的立场,后来的版本和更新使编译器更新了当前(或至少是C99)标准。

答案 1 :(得分:1)

VS2013是否实现/声明C99一致性? IIRC它没有。 在C89中,声明必须出现在块的开头,并且不能像在C ++或C99及更高版本中那样与代码混合。

允许您按照自己的意愿声明main。它必须是int main(void)