Opérateur ternaire à l'intérieur de printf

Après la lecture de cette j'ai commencé à penser que j'ai appris un butin d'environ printf(). Soudain, j'ai trouvé l'extrait de code suivant à partir de cette livre:

int main()
{
    char str[]="Hello";
    int i=5,j=10;
    printf(i>j?"%50s":"%s",str); //unable to understand this 
    return 0;
}

Étonnamment code ci-dessus fonctionne sans erreurs et il imprime Bonjour.
Selon mes connaissances qui suit est la syntaxe de printf():

int printf(const char *format,argument_list);

Donc, selon cette syntaxe, printf() devrait commencer avec la chaîne de format. Mais comme vous pouvez le voir dans le code ci-dessus printf() est de commencer avec i>j.
Signifie-t-il que je me trompe dans l'interprétation de la syntaxe de printf()?
Ne placer opérateur ternaire à l'intérieur de printf() est un cas spécial?

MODIFIER

Je sais à propos opérateur ternaire que je pose sur le premier argument de printf() qui devrait être const char* qui me semble pas dans mon exemple.

  • Le résultat de l'expression à l'intérieur de la 1ère paramètre doit être un pointeur vers une constante tableau de char, donc rien de surprenant.
  • vous voulez dire quelque chose, même sans les guillemets pointeur vers une chaîne constante
  • peut-être que les choses deviennent plus claires si vous l'écrire de cette façon: printf((i>j?"%50s":"%s"), str)
  • les deux "%50s" et "%s" sont en fait des pointeurs constants des tableaux de char. i>j?"%50s":"%s" est une expression. Le résultat de cette expression doit être un pointeur vers une constante char tableau. Je pense que vous confondez un const char * avec une expression constante, qui ne sont pas la même chose
InformationsquelleAutor A.s. Bhullar | 2014-07-02