Обработка аргумента командной строки - PullRequest
2 голосов
/ 30 июня 2010

Я работал с OpenCV, и некоторые примеры кода, которые я видел, используют следующее для чтения имени файла.Я понимаю, что argc - это число аргументов командной строки, которые были переданы, а argv - вектор строк аргументов, но может ли кто-нибудь уточнить, что делает каждая часть следующей строки?Я пытался найти это, но не нашел много результатов.Спасибо.

const char* imagename = argc > 1 ? argv[1] : "lena.jpg";

Спасибо.

Ответы [ 4 ]

6 голосов
/ 30 июня 2010
const char* imagename =  // assign the string to the variable 'image_name'
       argc > 1          // if there is more than one cmd line argument (the first is always the program name)
       ? argv[1]         // use the first argument after the program name
       : "lena.jpg";     // otherwise use the default name of "lena.jpg"
2 голосов
/ 30 июня 2010

Если argc больше 1, присваивает imagename указатель, содержащийся в argv[1] (т.е. первый аргумент, указанный в командной строке);в противном случае (argc не больше 1) присваивает значение по умолчанию, «lena.jpg».

Используется троичный оператор ?:.Это используется следующим образом: CONDITION ? A : B и может читаться как

if (CONDITION)
  A
else
  B

Так что a = C ? A : B присваивает A a, если C истинно, в противном случае B присваивается a,В этом конкретном случае «A» и «B» являются указателями на char (char *);атрибут const говорит, что у нас есть «строки», которые являются «постоянными».

1 голос
/ 30 июня 2010

В примере показано использование троичного оператора.

const char * imagename = argc> 1: argv [1]: "lana.jpg" По троичным можно сказать, что это выражение имеет три члена.

Первый член является условным выражением

Второй член - это значение, которое можно присвоить imagename, если условное выражение истинно.

Третий элемент - это значение, которое можно присвоить imagename, если условное выражение ложно.

Этот пример можно перевести на:

const char* imagename;
if(argc > 1)
    imagename = argv[1];
else
    imagename = "lana.jpg";
1 голос
/ 30 июня 2010
if (argc > 1) {
  const char* imagename = argv[1];
} else {
  const char* imagename = "lena.jpg";
}

(если мы согласны, что imagename может выйти за рамки скобок)

...