if(!variable_name)在c语言中的含义是什么

时间:2012-12-19 12:24:07

标签: c

这是问题

int main() {
    int pid = fork();
    if (!pid) {
        // condition 1
    } else {
        // condition 2
    }
    return 0;
}

(!pid)做什么?

7 个答案:

答案 0 :(得分:10)

相当于:

if (!pid != 0) /* ... */

然后:

if (pid == 0) /* ... */
  

C11(n1570),§6.5.3.3一元算术运算符

     

如果操作数的值比较,则逻辑否定运算符!的结果为0   如果其操作数的值等于0,则不等于0,1,结果的类型为int。   表达式!E相当于(0==E)

答案 1 :(得分:3)

这意味着否定。在您的情况下,condition 1将在子进程中的父进程condition 2中执行。

答案 2 :(得分:2)

如果!pid等于零,

pid表达式将为真。

基本上,它与:

相同
if (pid == 0) {
}

答案 3 :(得分:2)

在普通的旧C中,没有布尔数据类型,但有布尔逻辑。

数值全部评估为true,除了0,其值为false

这样做的结果是,如果你想测试条件是否为真,你实际上是将它与0进行比较。

C中的比较运算符产生truefalse结果意味着它们返回数字1或0。

否定运算符将true反转为false

答案 4 :(得分:0)

虚假的事情: false,0,null 事情是真的: 其他一切。

如果if!pid为true,则pid必须为0,false或null

答案 5 :(得分:0)

(!pid)相当于(pid == 0)

实际上,问题中的代码是错误的。 fork()可以返回以下三种内容之一:

>0子进程的进程ID。这将返回给父母。

0这将返回给孩子。

<0失败。这将返回给父母。

检查this tutorial是否正确使用fork的返回值。

答案 6 :(得分:0)

我猜所有发布的答案都是正确的。在一行中,(!pid)等同于(pid == 0) 然而,我借此机会解释如何/为何在这里使用它。

fork()函数将创建一个子进程A.K.A.儿童过程。因此,当函数返回时,在该实例中将有2个进程,这些进程在代码相同的位置执行。因此,它将返回两个过程副本 - 我们称之为父母和子。

当父进程返回时,fork()的返回值是子进程的PID。 &安培;在子进程中它是= 0。在您的代码中,pid = fork();将捕获此返回值。

如果(pid == 0)那么您正处于子进程中。如果(pid!= 0)您处于父进程中。根据您是父母还是孩子,您可以更改代码的行为。 (例如,您可以在儿童中使用exec,在父母中等待。)

有关fork功能的更多详细信息,请访问fork()