OpenCV argc et argv confusion

Je vérifie un tutoriel OpenCV et trouve cette ligne au début (voici le lien, le code est sous la section CalcHist http://opencv.willowgarage.com/documentation/c/histograms.html )

if (argc == 2 && (src = cvLoadImage(argv[1], 1)) != 0) 

Je n’ai jamais vu cela auparavant et je ne le comprends vraiment pas. J’ai vérifié quelques questions et réponses sur ce sujet mais je ne le comprends toujours pas. Quelqu’un pourrait-il m’expliquer quelle est la signification de cette ligne?

Merci!

La ligne effectue les opérations suivantes, dans l’ordre:

  1. Teste si argc == 2 – c’est-à-dire s’il y avait exactement 1 argument en ligne de commande (le premier “argument” est le nom de l’exécutable)
  2. Si tel est le cas (car si argc n’est pas argc 2, le court-circuiteur && annulera le test sans évaluer le bon côté), définit src sur le résultat de cvLoadImage appelé sur cet argument de ligne de commande
  3. Teste si ce résultat (et donc src ) n’est pas nul

argc et argv sont les noms (presque toujours) donnés aux deux arguments pris par la fonction main de C. argc est un entier et est égal au nombre d’arguments de ligne de commande présents lors de l’appel de l’exécutable. argv est un tableau de char* (représentant un tableau de chaînes terminées par NULL), contenant les valeurs réelles de ces arguments de ligne de commande. Logiquement, il contient des entrées argc .

Notez que argc et argv ont toujours le nom de l’exécutable comme première entrée, ainsi l’appel de commande suivant:

 $> my_program -i input.txt -o output.log 

… mettra 5 dans argc , et argv contiendra les cinq chaînes my_program , -i , input.txt , -o , output.log .

Donc, votre test if vérifie d’abord s’il y a exactement 1 argument de ligne de commande, mis à part le nom de l’exécutable ( argc == 2 ). Il utilise ensuite cet argument ( cvLoadImage(argv[1], 1) )

Vérifier argc puis utiliser argv[n] est un idiome courant, car il est dangereux d’accéder au-delà de la fin du tableau argv .