我有这个有线的东西:
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 是一个“慢”命令,但仍然不明白发生了什么。
我的程序中没有线程,所以我没有添加任何锁。 此外, foo 中的 &_cmd 值也没有改变。 我正在 Linux 上工作,用 c 编程。
最佳答案
it appears that inside foo the value in &_cmd is X (instead of what i expect - 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
.
关于c - 没有线程的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27886299/