- 论坛徽章:
- 0
|
如果局部变量声明为static类型,该变量在函数调用前和调用后是否存在? 比如下面这段代码, val_foo不是应该在程序的整个执行期内都保持吗? 为什么用gdb打印值的时候,发现val_foo只在foo函数的调用期间才存在? 还是我哪理解错了?
#include <stdio.h>
void foo(void);
int main(void)
{
int i = 0;
foo();
return 0;
}
void foo(void)
{
static int val_foo = 123;
sleep(1);
}
|
#gcc -g test.c
#gdb ./a.out
(gdb) list
1 #include <stdio.h>
2
3 void foo(void);
4
5 int main(void)
6 {
7 int i = 0;
8
9 foo();
10
11 return 0;
12 }
13
14 void foo(void)
15 {
16 static int val_foo = 123;
17 sleep(1);
18 }
19
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x080483dc in main at b.c:9
2 breakpoint keep y 0x080483f5 in foo at b.c:17
3 breakpoint keep y 0x080483e1 in main at b.c:11
(gdb) r
Starting program:./a.out
Breakpoint 1, main () at b.c:9
9 foo();
(gdb) p val_foo
No symbol "val_foo" in current context.
(gdb) c
Continuing.
Breakpoint 2, foo () at b.c:17
17 sleep(1);
(gdb) p val_foo
$1 = 123
(gdb) c
Continuing.
Breakpoint 3, main () at b.c:11
11 return 0;
(gdb) p val_foo
No symbol "val_foo" in current context.
(gdb)
|
|
|