C++还是C呢?为什么这个在VC、TC里有错误,而在BCB里没有呢?

MarsSoft 2001-03-13 09:31:00
下面这段小代码在VC、TC、BCB里
#include "stdio.h"
#include "stdlib.h"

void main(void)
{
for(int i=0; i<4; i++)
{
 printf("Hello");
}
for(int i=0; i<4; i++)
{
  printf("World");
}
}

为什么在同一个函数中这样使用时VC6、TC3都会编译出现下面错误:
: error C2374: 'i' : redefinition; multiple initialization
而在BCB里却编译通过运行正常呢?
我记得在ANSI C++标准里有,同时BCB的实现是正确,但有人说不
是的,这到底是哪个对呢?
请各位讨论一下,谢谢。
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
luodi 2001-03-14
  • 打赏
  • 举报
回复
VC确定不是那么与ANSI C++标准兼容,不过可以用一种简单的方法来避免这个问题,方法如下:

#include "stdio.h"
#include "stdlib.h"

void main(void)
{
for(int i=0; i<4; i++)
{
 printf("Hello");
}
//-------- insert a block here--------
{
for(int i=0; i<4; i++)
{
  printf("World");
}
//----------- end the block here--------
}

}

实际上只是增加了一个块,功能与原来是没有任何不同的。
估计VC编译实现的时候,对所有for, while, if等块,其中变量所处的块(也即变量所处的命名空间)判断有问题,所以我们必须特意给它指出一个块才行。
BCB在这方面就兼容性更好一些吧。不过迄今为止也没有一个编译器可以声称100%兼容ANSI C++的,大家都是五十步笑百步而已。

neptune 2001-03-14
  • 打赏
  • 举报
回复
很简单, 很多的ansi 标准vc并不完全兼容,bcb也一样,只不过兼容的比vc多一些而已。
MarsSoft 2001-03-13
  • 打赏
  • 举报
回复
我伤心,我痛苦,为什么我不能用BCB呢?工作了就不像以前在学校了。唉,努力习惯吧
cber 2001-03-13
  • 打赏
  • 举报
回复
ANSI C++标准支持你的写法
cber 2001-03-13
  • 打赏
  • 举报
回复
VC并不完全符合ANSI C++标准,像你给出来的语句,在VC中就是不能编译通过。没什么好说的。
至于TC3,我没有用过,但根据你给出的错误信息来看,它对于这种问题的处理方法可能和VC6一样。
所以,如果你用VC的话,千万不要想当然的用你给出来的语句。
MarsSoft 2001-03-13
  • 打赏
  • 举报
回复
我的文件扩展名都是CPP的,我觉得对于BCB的实现来说比较方便于程序员,因为每一次的循环都仅仅只需要那个i在循环的时候有用,而循环结束就没效,这样也可使代码比较简洁。
我最想知道的就是ANSI C++标准里是怎样的。
rh 2001-03-13
  • 打赏
  • 举报
回复
你的程序扩展名是c吧?
在vc里扩展名是c的源程序
按照c方式编译
那么你的i当然不能那样定义啦

事实上你的i是按照c++语法定义的
你把后缀名改成cpp
在vc6里应该就没有错

或者你把程序改成:
#include "stdio.h"
#include "stdlib.h"

void main(void)
{
int i;
for(i=0; i<4; i++)
{
 printf("Hello");
}
for(i=0; i<4; i++)
{
  printf("World");
}
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧