在Android开源qemu代码中,我遇到了这行代码:
machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
Run Code Online (Sandbox Code Playgroud)
这只是一种令人困惑的说法:
if (machine->max_cpus) {
; //do nothing
} else {
machine->max_cpus = 1;
}
Run Code Online (Sandbox Code Playgroud)
如果是这样,那就不会更清楚了:
if (machine->max_cpus == 0) machine->max_cpus = 1;
Run Code Online (Sandbox Code Playgroud)
有趣的是,这可以编译并与gcc一起使用,但不能在http://www.comeaucomputing.com/tryitout/上编译.
对于速记IF-ELSE语句,C具有以下语法
(integer == 5) ? (TRUE) : (FALSE);
Run Code Online (Sandbox Code Playgroud)
我经常发现自己只需要声明的一部分(TRUE或FALSE)并使用它
(integer == 5) ? (TRUE) : (0);
Run Code Online (Sandbox Code Playgroud)
我只是想知道是否有办法不使用这种速记符号包含声明的ELSE部分?