c - 没有线程的全局变量

标签 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 是一个“慢”命令,但仍然不明白发生了什么。

我的程序中没有线程,所以我没有添加任何锁。 此外, 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/

相关文章:

c - 变量中存在无法解释的垃圾值

c - FOPEN_MAX 和 _SC_OPEN_MAX

linux - 需要读取文件并将结果用作 shell 脚本中的命名变量

linux - 能够在 bash SED 中使用变量

c - 使用指针获取数组的长度

c - 从哪里可以获得这些头文件?

c - 在 C 中的循环/IF 结构外声明变量

linux - 自动更改 C 代码中某些内容的脚本或命令?

python - 连接两个 csv 文件

python - 在 azure 批处理节点上安装 Microsoft ODBC Driver 13 for SQL Server