Po przeczytaniu this zacząłem myśleć, że nauczyłem się łupu o printf()
. Nagle znalazłem następujący fragment kodu z this książki:Ternary operator wewnątrz printf
int main()
{
char str[]="Hello";
int i=5,j=10;
printf(i>j?"%50s":"%s",str); //unable to understand this
return 0;
}
Niespodziewanie Powyższy kod działa bez błędów i drukuje Witam. Według mojej wiedzy jest następujący składnia printf()
:
int printf(const char *format,argument_list);
więc według tej składni, printf()
powinien zacząć ciągu formatu. Ale jak widać w powyższym kodzie printf()
zaczyna się od i>j
. Czy to znaczy, że nie mam racji interpretując składnię printf()? Czy umieszczenie operatora trójskładnikowego wewnątrz printf() jest przypadkiem specjalnym?
EDIT
wiem o potrójnym operatora Pytam o pierwszy argument printf()
który powinien być const char *, które nie wydają się w moim przykładzie.
Wynik wyrażenia wewnątrz pierwszego parametru musi być wskaźnikiem do stałej tablicy znaków, więc nic zaskakującego. –
masz na myśli wszystko, nawet bez podwójnych cudzysłowów jest wskaźnikiem na stały ciąg –
być może rzeczy staną się bardziej przejrzyste, jeśli napiszesz to w ten sposób: 'printf ((i> j?"% 50s ":"% s "), str)' –