没有线程的全局变量

时间:2015-01-11 11:00:43

标签: c linux

我有这个有线的事情:

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。

中编程

1 个答案:

答案 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