有什么理由说下面的代码不起作用? (编译为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中的错误吗?
要解决上述问题,可以执行以下任何操作:
更新:vs2015(vs140)似乎没有这个&#34;错误&#34;
答案 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)
。