下面的程序是如何编译的

wanghengxn 2011-06-16 09:54:21

例子1:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
int c;
int k = 9;
if (true) {
z(out c);
}
Response.Write(c.ToString());


}
}
public bool z(out int a) {
a = 1;
return true;
}
正常输出1.

例子2:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
int c;
int k = 9;
if (k==9) {
z(out c);
}
Response.Write(c.ToString());


}
}
public bool z(out int a) {
a = 1;
return true;
}
编译错误,c未初始化
...全文
69 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
51Crack 2011-06-16
  • 打赏
  • 举报
回复
过了这么久了
51Crack 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wanghengxn 的回复:]
难道程序不是顺序执行的吗?
[/Quote]
你说的是运行时的情况了
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ghost5216 的回复:]

引用 5 楼 wanghengxn 的回复:
引用 1 楼 ghost5216 的回复:

这不是问过了么
int k = 9;
if (k==9) {//有可能跳过编译
z(out c);
}
Response.Write(c.ToString());//需要c初始化

给点详细的说明

k 在编译时无法确定 ,因为它是运行时确定的。
(k==9)在编译时无法确定为真……
[/Quote]
嗯 ,不错。结贴给分
ghost5216 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ghost5216 的回复:]
给点详细的说明

k 在编译时无法确定 ,因为它是运行时确定的。
(k==9)在编译时无法确定为真T……
[/Quote]
如果你一定要那么写可以改成下面这样
const int k = 9;
编译时确定了k
ghost5216 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wanghengxn 的回复:]
引用 1 楼 ghost5216 的回复:

这不是问过了么
int k = 9;
if (k==9) {//有可能跳过编译
z(out c);
}
Response.Write(c.ToString());//需要c初始化

给点详细的说明
[/Quote]
k 在编译时无法确定 ,因为它是运行时确定的。
(k==9)在编译时无法确定为真TRUE
所以c不能确定被z初始化
Response.Write(c.ToString());//需要c初始化
porschev 2011-06-16
  • 打赏
  • 举报
回复

if(true)和if(k==9)

前者一定会进去。。。后者有可能不会进if条件里。。

所以编译器不能确定它一定会被执行到。
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ghost5216 的回复:]

这不是问过了么
int k = 9;
if (k==9) {//有可能跳过编译
z(out c);
}
Response.Write(c.ToString());//需要c初始化
[/Quote]
给点详细的说明
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ghost5216 的回复:]

这不是问过了么
int k = 9;
if (k==9) {//有可能跳过编译
z(out c);
}
Response.Write(c.ToString());//需要c初始化
[/Quote]
难道程序不是顺序执行的吗?
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ghost5216 的回复:]

这不是问过了么
int k = 9;
if (k==9) {//有可能跳过编译
z(out c);
}
Response.Write(c.ToString());//需要c初始化
[/Quote]
为什么会跳过编译?
cjh200102 2011-06-16
  • 打赏
  • 举报
回复
楼上分析正解
ghost5216 2011-06-16
  • 打赏
  • 举报
回复
这不是问过了么
int k = 9;
if (k==9) {//有可能跳过编译
z(out c);
}
Response.Write(c.ToString());//需要c初始化

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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