#c #operators #argc
#c #операторы #argc
Вопрос:
Не мог бы кто-нибудь любезно объяснить мне использование следующего выражения в 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()
это просто преобразование строки в libc (аргументы всегда обрабатываются как строки в Unix / Linux) вdouble
, обработка ошибок (во время преобразования) не предусмотрена.
Я прав?
Комментарии:
1. Нет, это означает второй и третий элементы (если они заданы). В C массивы индексируются из
[0]
. Если это fromint main(int argc, char *arg[])
, то первый элемент — это имя исполняемого файла, а следующие элементы будут первым, вторым аргументом командной строки .2. Но argv[0]: это имя запущенной программы, так что это не реальный параметр.
Ответ №1:
double irate = argc > 1? atof(arg[1]) : 1;
Может быть записано как:
if (argc > 1)
irate = atof(arg[1]);
else
irate = 1
Или может быть прочитано как: если количество аргументов больше единицы, преобразуйте второй аргумент из строки ascii в число с плавающей запятой и сохраните его в переменной irate, в противном случае установите для него значение 1.
То же самое для второй строки.
Взгляните на Условный оператор
Ответ №2:
irate
и orate
должны предоставляться из командной строки, соответственно, в качестве первого аргумента после имени исполняемого файла ( argv [1]
) и в качестве второго аргумента ( argv [2]
).
Выражение
double irate = argc > 1? atof(arg[1]) : 1;
используется для инициализации соответствующей переменной, но только в том случае, если был предоставлен соответствующий аргумент. В противном случае преобразование будет бессмысленным, поэтому присваивается значение по умолчанию ( 1
).
То же самое можно сказать и о orate
: значение по умолчанию 2
присваивается, если соответствующий аргумент не указан.