2010-06-30 16 views
2

J'ai travaillé avec OpenCV, et une partie de l'exemple de code que j'ai vu utilise ce qui suit pour lire un nom de fichier. Je comprends que argc est le nombre d'arguments de ligne de commande qui ont été passés, et argv est un vecteur de chaînes d'arguments, mais quelqu'un peut-il clarifier ce que fait chaque partie de la ligne suivante? J'ai essayé de chercher ceci mais n'ai pas trouvé beaucoup de résultats. Merci.Traitement de l'argument de la ligne de commande

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

Merci.

Répondre

1

L'exemple montre l'utilisation de l'opérateur ternaire. Const_image = argc> 1: argv [1]: "lana.jpg" Par ternaire, vous pouvez dire que cette expression a trois membres.

Le premier élément est une expression de condition

membre deuxième est la valeur qui pourrait être affectée à imagename si l'expression conditionnelle est vrai.

Le troisième membre est la valeur qui pourrait être affectée à imagename si l'expression conditionnelle est false.

Cet exemple peut être traduit:

const char* imagename; 
if(argc > 1) 
    imagename = argv[1]; 
else 
    imagename = "lana.jpg"; 
+0

Salut à tous, merci pour l'aide. Toutes vos réponses ont été utiles et ont totalement éclairci cela. – SSilk

2

Si argc est supérieur à 1, attribue à imagename le pointeur maintenu en argv[1] (c'est-à-dire le premier argument donné sur la ligne de commande); sinon (argc n'est pas supérieur à 1), attribue une valeur par défaut, "lena.jpg".

Il utilise l'opérateur ternaire ?:. Ceci est utilisé de cette façon: CONDITION ? A : B et peut être lu comme

if (CONDITION) 
    A 
else 
    B 

Alors que a = C ? A : B attribue A à a si C est vrai, cède d'une autre B-a. Dans ce cas spécifique, "A" et "B" sont des pointeurs vers char (char *); l'attribut const indique que nous avons des "chaînes" qui sont "constantes".

6
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" 
1
if (argc > 1) { 
    const char* imagename = argv[1]; 
} else { 
    const char* imagename = "lena.jpg"; 
} 

(si nous sommes d'accord que imagename peut sortir de la portée entre parenthèses)