Non, ce n'est pas garanti par la norme. La norme dit ceci au sujet « string » littéraux (6.4.5p6):
Il est précisé si ces tableaux sont distincts à condition que leurs éléments ont les valeurs appropriées.
Ces tableaux se réfère au tableau de char
créé à partir d'une chaîne littérale en phase de traduction 7.
Depuis que vous utilisez une macro, le code vu par le compilateur est:
if(strstr("plaintext", optarg) == "plaintext")
Lorsque optarg
est "plaintext"
, le code réduit à
if("plaintext" == "plaintext")
Comme mentionné ci-dessus, ce n'est pas garanti pour être vrai en C.
Donc, vous devez utiliser strcmp()
au lieu de vérifier les pointeurs pour l'égalité, ou, comme dans l'autre réponse, définir un pointeur char *
utiliser à la place de la macro.
Ahh! Vos réponses se réfèrent les unes aux autres! Je ne peux pas m'arrêter d'aller et venir entre eux! –
Si maintenant seule la question aurait été sur la récursivité ... – sth
LOL! Un bon exemple de récurrence mutuelle, j'espère. –