Questions tagged «local-variables»


8
在if语句中初始化的变量的作用域是什么?
我是Python的新手,所以这可能是一个简单的范围界定问题。Python文件(模块)中的以下代码使我有些困惑: if __name__ == '__main__': x = 1 print x 在我使用过的其他语言中,此代码将引发异常,因为该x变量是if语句的局部变量,不应在其外部存在。但是此代码将执行并打印1。任何人都可以解释此行为吗?是否在模块中创建的所有变量都是全局的/可用于整个模块?


2
如何从Delphi程序或编译器生成的调试信息中提取局部变量信息(地址和类型)?
我的目标是: 给定Delphi编译的32或64位Windows程序中的挂起线程,可以遍历堆栈(可行) 给定堆栈条目,以枚举每种方法中的局部变量及其值。也就是说,至少要找到它们的地址和类型(整数32/64 /有符号/无符号,字符串,浮点数,记录,类...),可以将它们的组合用于查找其值。 第一个很好,这是这个问题的第二个。从高层次上讲,如何在Delphi中给定堆栈条目的情况下枚举局部变量? 从低层次看,这就是我一直在研究的内容: RTTI:未列出有关方法的此类信息。我实际上从未想到过这是一个现实的选择,但无论如何都要在此处列出。 调试信息:加载为调试版本生成的调试信息。 地图文件:即使是详细的地图文件(一种文本格式的文件!打开其中的文件并查看)也不包含局部变量信息。它基本上是地址和源文件行号的列表。非常适合地址与文件和线的关联,例如装订线中的蓝点;不太适合获得更详细的信息 远程调试信息(RSM文件)- 关于其内容或格式的未知信息。 TD32 / TDS文件:我目前的研究方向。它们包含许多其他信息中的全局和局部符号。 我在这里遇到的问题是: 没有TD32文件格式的文档(我可以找到。) 我对它们的大部分了解都来自使用它们的Jedi JCL代码(JclTD32.pas),我不确定如何使用该代码,或者不确定其中的结构是否足够广泛以显示本地var。我很确定它将处理全局符号,但是我对局部符号不确定。我定义了各种各样的常量,并且没有格式的文档,要阅读它们的含义,我在猜测。但是,这些常量及其名称必须来自某个地方。 我可以使用TDS信息找到的源无法加载或处理本地符号。 如果这是正确的方法,那么这个问题将变成“是否存在有关TDS / TD32文件格式的文档,并且是否有任何代码示例加载局部变量?” 代码示例不是必不可少的,但即使非常少也可能非常有用。

9
C中字符串文字的“生存期”
下列函数返回的指针不会不可访问吗? char *foo(int rc) { switch (rc) { case 1: return("one"); case 2: return("two"); default: return("whatever"); } } 因此,C / C ++中局部变量的生存期实际上仅在函数内,对吗?这意味着char* foo(int)终止后返回的指针不再意味着什么,对吗? 我对局部变量的生存期感到困惑。什么是好的澄清?

2
在ArrayBlockingQueue中,为什么将最终成员字段复制到本地最终变量中?
在中ArrayBlockingQueue,所有需要锁定的方法都将final在调用之前将其复制到局部变量lock()。 public boolean offer(E e) { if (e == null) throw new NullPointerException(); final ReentrantLock lock = this.lock; lock.lock(); try { if (count == items.length) return false; else { insert(e); return true; } } finally { lock.unlock(); } } 没有任何理由复制this.lock到一个局部变量lock时,现场this.lock的final? 此外,E[]在执行操作之前,它还会使用的本地副本: private E extract() { final E[] items = this.items; …

4
为什么我们不能通过未初始化的局部变量访问静态内容?
看下面的代码: class Foo{ public static int x = 1; } class Bar{ public static void main(String[] args) { Foo foo; System.out.println(foo.x); // Error: Variable 'foo' might not have been initialized } } 如您所见,尝试x通过未初始化的局部变量Foo foo;代码访问静态字段时会foo.x生成编译错误:Variable 'foo' might not have been initialized。 它可能看起来像这样的错误是有道理的,但直到我们意识到,访问static成员的JVM不实际使用的价值变量,但只有它的类型。 例如,我可以foo使用value进行初始化,null这将使我们能够x毫无问题地进行访问: Foo foo = null; System.out.println(foo.x); //compiles and at …

8
Java中的默认值和初始化
根据我的参考,原始类型具有默认值,而Objects为null。我测试了一段代码。 public class Main { public static void main(String[] args) { int a; System.out.println(a); } } 该行将System.out.println(a);指向一个变量a,指出该错误,variable a might not have been initialized而在给定的引用中,integer将具有0默认值。但是,使用下面的给定代码,它将实际打印出来0。 public class Main { static int a; public static void main(String[] args) { System.out.println(a); } } 第一个代码可能会出什么问题?类实例变量的行为与局部变量不同吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.