我有这两个功能
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.
slim.. 5
既然你还没有提供外部代码(还有吗?),这就是猜测.
while(some condition) { foo1(); foo2(); }
foo1打印' one
'然后等待一些输入.你输入' f[enter]
'.
foo1消耗' f
'.
foo2打印'two'然后消耗[enter]
(换行符).
然后你回到开始,这一切都再次发生.
对于第二个版本,foo1()不再读取任何内容.
所以:
foo1打印' one
'
foo2打印' two
'然后等待一些输入.你键入' f[enter]
'
foo2消耗了' f
'
唯一剩下的问题是为什么它会停止.为了帮助你,我们必须看看究竟(some condition)
是什么.
请注意,在getchar()
不保留结果的情况下调用是相当不寻常的(如c = getchar();
).你有理由这样做吗?
一个有用的C语言是:
(void) getchar();
无效的演员表示程序员知道他们正在丢弃返回值.
既然你还没有提供外部代码(还有吗?),这就是猜测.
while(some condition) { foo1(); foo2(); }
foo1打印' one
'然后等待一些输入.你输入' f[enter]
'.
foo1消耗' f
'.
foo2打印'two'然后消耗[enter]
(换行符).
然后你回到开始,这一切都再次发生.
对于第二个版本,foo1()不再读取任何内容.
所以:
foo1打印' one
'
foo2打印' two
'然后等待一些输入.你键入' f[enter]
'
foo2消耗了' f
'
唯一剩下的问题是为什么它会停止.为了帮助你,我们必须看看究竟(some condition)
是什么.
请注意,在getchar()
不保留结果的情况下调用是相当不寻常的(如c = getchar();
).你有理由这样做吗?
一个有用的C语言是:
(void) getchar();
无效的演员表示程序员知道他们正在丢弃返回值.