我有这个有线的事情:
typedef enum { X, Y } cmd;
cmd _cmd;
..
..
_cmd = X; //global variable
some_var = 5;
foo(...., &_cmd);
_cmd = Y;
some_var = 6;
foo(...., &_cmd);
我的错误发生在第二次调用foo时。似乎在foo中,& _cmd中的值是X(而不是我期望的 - Y)。
但是,如果我在_cmd = Y之后添加一些printf;这个错误并没有发生 - 在& _cmd我有Y. 怎么会这样?
我知道printf是一个"慢"命令,但仍然不明白发生了什么。
我的程序中没有线程,所以我没有添加任何锁。 另外,& _cmd值在foo中没有变化。 我正在使用linux,在c。
中编程答案 0 :(得分:0)
看来,在foo中,& _cmd中的值是X(而不是我期望的 - Y)。
我希望&_cmd
的地址为_cmd
,而不是X和Y.这个错误几乎肯定是foo()
中你没有提供的。
以下列举例说明:
void foo( cmd* arg )
{
printf( "%d", (int)*arg ) ; // Value pointed to by local arg.
printf( "%d", (int)*_cmd) ; // Value pointed to by global _cmd.
}
然后,对于调用foo( &_cmd ) ;
,两个输出都是相同的(以及分配给_cmd
的任何内容),因为arg == &_cmd
。