我有这两个功能
void set_dram_channel_width(int channel_width){
printf("one\n");
getchar();
}
void set_dram_transaction_granularity(int cacheline_size){
printf("two\n");
getchar();
}
//output:
one
f //my keyboard input
two
one
f //keyboard input
two
one
f //keyboard input
//No more calls
然后我将功能更改为:
void set_dram_channel_width(int channel_width){
printf("one\n");
}
void set_dram_transaction_granularity(int cacheline_size){
printf("two\n");
getchar();
}
//output
one
two
f //keyboard input
//No more calls
两个函数都由外部代码调用,两个程序的代码是相同的,只需更改getchar()我得到那两个不同的输出。这是可能的还是我的代码中存在一些错误的东西?
由于
这是我用GDB获得的输出**
第一个代码
(gdb) break mem-dram.c:374
Breakpoint 1 at 0x71c810: file build/ALPHA_FS/mem/dramsim/mem-dram.c, line 374.
(gdb) break mem-dram.c:381
Breakpoint 2 at 0x71c7b0: file build/ALPHA_FS/mem/dramsim/mem-dram.c, line 381.
(gdb) run -d ./tmp/MyBench2/
one
f
[Switching to Thread 47368811512112 (LWP 17507)]
Breakpoint 1, set_dram_channel_width (channel_width=64)
(gdb) c
Continuing.
two
one
f
Breakpoint 2, set_dram_transaction_granularity (cacheline_size=64)
(gdb) c
Continuing.
Breakpoint 1, set_dram_channel_width (channel_width=8)
374 void set_dram_channel_width(int channel_width){
(gdb) c
Continuing.
two
one
f
对于第二个代码
(gdb) break mem-dram.c:374
Breakpoint 1 at 0x71c7b6: file build/ALPHA_FS/mem/dramsim/mem-dram.c, line 374.
(gdb) break mem-dram.c:380
Breakpoint 2 at 0x71c7f0: file build/ALPHA_FS/mem/dramsim/mem-dram.c, line 380.
(gdb) run
one
two
f
[Switching to Thread 46985688772912 (LWP 17801)]
Breakpoint 1, set_dram_channel_width (channel_width=64)
(gdb) c
Continuing.
Breakpoint 2, set_dram_transaction_granularity (cacheline_size=64)
(gdb) c
Continuing.
Breakpoint 1, set_dram_channel_width (channel_width=8)
(gdb) c
Continuing.
答案 0 :(得分:5)
既然你没有提供外部代码(还有吗?),这就是猜测。
while(some condition) {
foo1();
foo2();
}
one
'然后等待一些输入。您输入“f[enter]
”。f
”。[enter]
(换行符)。使用第二个版本时,foo1()不再读取任何内容。
所以:
one
'two
'然后等待一些输入。您输入“f[enter]
”f
”唯一剩下的问题是为什么它会停止。为了帮助您,我们必须看到(some condition)
实际上是什么。
请注意,在不保留结果的情况下调用getchar()
是相当不寻常的(如c = getchar();
中所述)。你有理由这样做吗?
一个有用的C语言是:
(void) getchar();
强制转换为程序员表示他们知道他们正在丢弃返回值。