error C2143: 语法错误 : 缺少“;”(在“类型”的前面)

本文分享了一个在使用VS2010调试简单C代码时遇到的陷阱,即变量声明的位置问题。C99规范允许变量在代码中任意位置声明,但初学者易忽略此变化导致错误。通过分析问题及解决过程,强调理解C语言最新标准的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

坑爹呀,使用VS2010调试代码,写程序如下:

int A(){

  int x=1;
  if(x>2) return;
  int y1,y2;
  y1=10;
  y2=11;
}

妈的,如此简单的代码,怎么调试都无法通过,报error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
怎么看都没有错误呀!!
后来,经人指点,原来变量要定义在函数的开始,不能在语句之后:

int A(){

  int x=1;
  int y1,y2;
  if(x>2) return;
  y1=10;
  y2=11;
}
这样才不会报错!!!
神呀,花了几个小时才搞明白!!!
这么坑爹呀!
这是什么道理???


找到原因了: http://blog.163.com/zhaojie_ding/blog/static/17297289520115210564890/

C99支持混合声明(mix declarations and code,其实也就是解除了原先必须在block的第一条语句之前声明变量的限制:现在C99也和C++一样,可以在代码中随时声明变量了。
不过我看很多人尤其是初学者,可能压根不晓得原来C99之前是不能在代码里混着声明变量啊。。。因为大部分C编译器其实都扩展支持了这个特性(比较严格的也最多打个warning罢了),而N多菜鸟用C垒代码,都是觉得缺了个变量就顺手定义一下然后就继续往下垒了,能编译过就算胜利~~不过现在倒是好了。。如果有老师傅鄙视你随地声明变量,你可以理直气壮地告诉他:这是C99标准支持的!

好像大家对于C99不是很欢迎,因为C99完全脱离了C++,不兼容了,所以不讨大家喜欢吧,而且哪个厂商还有心情去搞C的编译器呢?
不赚钱,累的要死,古老的语言,C89也挺好的!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值