用 ? 解释 C 表达式: 和 >

Explain an C expression with ? : and >

任何人都可以向我解释一下 C 中以下表达式的用法吗?

double irate = argc > 1? atof(arg[1]) : 1;
double orate = argc > 2? atof(arg[2]) : 2;

(取自一个soxr例子的开头https://sourceforge.net/p/soxr/code/ci/master/tree/examples/1-single-block.c。)

是不是类似这样的意思:

"如果参数的数量大于一个,取第一个参数并将其放入 irate 变量,否则将数字 1 放入同一变量"

与第二个可能的参数类似...

atof() is just a libc conversion of a string (arguments are always treated as strings in Unix/Linux) to double, error (while conversion) handling is not provided.

我说得对吗?

double irate = argc > 1? atof(arg[1]) : 1;

可以写成:

if (argc > 1)
    irate = atof(arg[1]);
else
    irate = 1

或者可以理解为:如果参数个数大于1,则将第二个参数从ascii字符串转换为float并存入变量irate中,否则设置为1的值。

第二行同理

看看Conditional operator

irateorate 应该从命令行提供,分别作为可执行文件名称 (argv [1]) 之后的第一个参数和第二个参数 (argv [2]).

表达式

 double irate = argc > 1? atof(arg[1]) : 1;

不要初始化适当的变量,但前提是提供了相应的参数。否则,转换将毫无意义,因此分配了 默认值 (1)。

对于orate也是如此:如果未提供相应的参数,则分配默认值2