下面这程序我编译不过,但钱能说可以(30分)

  • 主题发起人 主题发起人 hthugm
  • 开始时间 开始时间
H

hthugm

Unregistered / Unconfirmed
GUEST, unregistred user!
# include<iostream.h>
void main()
{
int m=5;
if (m==5)
goto abc;
int n=0;
abc:
cout<<"m="<<m<<",n="<<n<<endl;
}
 
在c++里用goto你可真的有想象力。
 
:abc
为什么m==5就不定义n
 
同意alf_123.N在执行过程中没有定义。你的钱也没办法![:D]
 
楼上:偶也是这意思,没说清楚
 
在goto语句下面不能定义变量的
把变量定义放到第一个goto前面就行了
我的程序每个函数基本上都有goto语句的
很方便
 
这个是c++的特点,int n=5,是在这一行定义和初始化的,定义可以跳过,初始化不能跳过
改成下面的是可以的,但是,你要注意,如果m==5,那么abc:后面n是个不确定的数字,为了避免这个情况,
你还可以把n=0放到abc:后面
if (m==5)
goto abc;
int n;
n=0;
abc:
……
 
Pipi懂的东西真多!
 
肯定不能通过编译,跳过了n的声明(应该是初始化,不是声明),也跳过了n的定义。
vc的编译器cl的提示:initialization of 'n' is skipped by 'goto abc'。
Dev c++的编译器gcc提示:crosses initialization of `int n'。
事实上这里m=4;还是通不过;不是“m==5就不定义n”的问题。
不能在可选分支上定义变量。比如在if-else
分支中定义变量。
就算你以后不用n,还是通不过编译。
 
抱歉,看了C++ Primer才知道。
goto可以先前跳过复合语句,
int m=5;
if (m==5)
goto abc;
{int n=0;}
abc:
可以,提出的问题的情况之所以不行,是因为对象的构造函数和析构函数都要执行或
都不执行。
所以我想,在C下可能可以通过编译。
 
为什么下面的可以,
goto abc;
{int n=0;}
abc:
那是因为n只能在{ }里面可见,出了{ }就不能被访问了,所以不存在什么跳过初始化了
 
可以编译通过(标准C++)
因为在C++程序中,并不是根据运行顺序来决定变量定义的顺序,而是所有的变量和对象都
在函数开始运行时,统一定义。同意定义的顺序正是这些变量和对象在函数中出现的
顺序,那么前面所提到的语句被提到只有n=0;语句会跳过
而C++会对变量进行自动初始化~
用VC编译看看会不会通过。
当然会了。结果是n还是等于0
 
BCB 提示:
[C++ Error] File1.cpp(6): E2203 Goto bypasses initialization of a local variable
 
我看大家讨论很认真
答案是这样:
vc is not pass
c is pass
 
无聊至极
 
钱能也会出错,他顶多一教授而已
 
大家无聊的可以!!!
怪不人家说,这个地方——**###¥¥¥¥————++||···!!!
 
清华的钱能编写的那本书不止这一个错误,
谭浩强的c语言程序设计上也有好多的错误,
不要盲从。编译器就是法官,另外,这种小
程序不要抠得过细,否则就算是研究了200个
这种小程序,还是编不了上千行的程序。
 
后退
顶部